使用asp.net在gridview中创建一个自定义的删除和编辑?
问题描述:
今天我正在学习所有关于gridviews的知识。总结我的GridView的内容,那就是:使用asp.net在gridview中创建一个自定义的删除和编辑?
Id Type Name Image
Delete Edit 1 Guitar Ibanez pic1.jpg
Delete Edit 2 Guitar Fender pic2.jpg[LabelId]
[LabelName]
我想要做的是,每当我点击按钮删除或编辑和更新按钮,它应该检索列名的值。例如,如果我点击第二行的编辑按钮,它应该检索名称“Fender”并将其显示在[LabelName]
以及其[LabelId]
。另外,如果我点击第一行的删除按钮,它应该检索名称“Ibanez”并将其显示在下面的标签上。同样适用于更新按钮。它应该总是显示名称,我会每当编辑,删除和更新按钮被点击。
我试着为此创建一个代码,但它只检索我想要的名称,它总是空白的。
这里是aspx
代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="id" DataSourceID="SqlDataSource1">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button3" runat="server" Text="Delete" OnClick="Button3_Click"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<EditItemTemplate>
<asp:Button ID="ButtonUpdate" runat="server" CausesValidation="True" CommandName="Update" Text="Update" OnClick="ButtonUpdate_Click"/>
<asp:Button ID="Button2" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
<ItemTemplate>
<asp:Button ID="ButtonEdit" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit" OnClick="ButtonEdit_Click"/>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="id" SortExpression="id">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("id") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="type" SortExpression="type">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("type") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("type") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="name" SortExpression="name">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("name") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="image" SortExpression="image">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("image") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("image") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:BrandsDBConnectionString %>" DeleteCommand="DELETE FROM [guitarBrands] WHERE [id] = @id" InsertCommand="INSERT INTO [guitarBrands] ([id], [type], [name], [image]) VALUES (@id, @type, @name, @image)" SelectCommand="SELECT [id], [type], [name], [image] FROM [guitarBrands]" UpdateCommand="UPDATE [guitarBrands] SET [type] = @type, [name] = @name, [image] = @image WHERE [id] = @id">
<DeleteParameters>
<asp:Parameter Name="id" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="id" Type="Int32" />
<asp:Parameter Name="type" Type="String" />
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="image" Type="String" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="type" Type="String" />
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="image" Type="String" />
<asp:Parameter Name="id" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
<br/>
<asp:Label ID="lblId" runat="server" Text="Label"></asp:Label><br/>
<asp:Label ID="lblName" runat="server" Text="Label"></asp:Label><br/>
</form>
这里是aspx.cs代码:
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
SqlConnection con1;
SqlCommand cmd1;
DataSet ds1;
public _Default()
{
con1 = new SqlConnection();
con1.ConnectionString = ConfigurationManager.ConnectionStrings["BrandsDBConnectionString"].ToString();
cmd1 = new SqlCommand();
ds1 = new DataSet();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bindgridviewguitarbrands();
}
}
//Start of Gridview Code for Guitar Brands
private void bindgridviewguitarbrands()
{
con1.Open();
cmd1.CommandText = "SELECT * FROM [guitarBrands]";
cmd1.Connection = con1;
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
da1.Fill(ds1);
con1.Close();
GridView1.DataBind();
}
protected void Button3_Click(object sender, EventArgs e)
{
Button btn1 = sender as Button;
GridViewRow gridrow = btn1.NamingContainer as GridViewRow;
int id = Convert.ToInt32(GridView1.DataKeys[gridrow.RowIndex].Value.ToString());
string name = GridView1.Rows[gridrow.RowIndex].Cells[4].Text;
lblId.Text = id.ToString();
lblName.Text = name;
}
protected void ButtonEdit_Click(object sender, EventArgs e)
{
Button btn2 = sender as Button;
GridViewRow gridrow = btn2.NamingContainer as GridViewRow;
int id = Convert.ToInt32(GridView1.DataKeys[gridrow.RowIndex].Value.ToString());
string name = GridView1.Rows[gridrow.RowIndex].Cells[4].Text;
lblId.Text = id.ToString();
lblName.Text = name;
}
protected void ButtonUpdate_Click(object sender, EventArgs e)
{
Button btn3 = sender as Button;
GridViewRow gridrow = btn3.NamingContainer as GridViewRow;
int id = Convert.ToInt32(GridView1.DataKeys[gridrow.RowIndex].Value.ToString());
string name = GridView1.Rows[gridrow.RowIndex].Cells[4].Text;
lblId.Text = id.ToString();
lblName.Text = name;
}
}
有了这个代码,答案将是一个更大的一部分完成我的项目。希望你能帮我解决这个问题。
答
该单元格不包含Text
但确实包含Label
。我想试试这个:
var cell = GridView1.Rows[gridrow.RowIndex].Cells[4];
string name = ((Label)cell.FindControl("Label1")).Text;
我试过的代码,但它给我这个错误:**“的TableCell”不包含“FindControls”的定义,并没有扩展方法“FindControls”接受一个类型的第一个参数'TableCell'可以找到(你是否缺少使用指令或程序集引用?).. ** – BrunoEarth
对不起,它是'FindControl',最后没有's'。我试图从记忆中做到这一点。 –
是的,几个小时前我能够改变它,但这次错误发生在.Text。我不知道为什么它切换到.Text,它有相同的错误。 – BrunoEarth