使用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"/> 
        &nbsp;<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; 
+0

我试过的代码,但它给我这个错误:**“的TableCell”不包含“FindControls”的定义,并没有扩展方法“FindControls”接受一个类型的第一个参数'TableCell'可以找到(你是否缺少使用指令或程序集引用?).. ** – BrunoEarth

+0

对不起,它是'FindControl',最后没有's'。我试图从记忆中做到这一点。 –

+0

是的,几个小时前我能够改变它,但这次错误发生在.Text。我不知道为什么它切换到.Text,它有相同的错误。 – BrunoEarth