Как создать пользовательское удаление и редактирование в gridview с помощью ASP.NET?
Сегодня я узнаю все о gridviews. Чтобы суммировать содержимое моего gridview, вот оно:
ID Название Тип Изображения
Удалить редактировать 1-гитарой pic1.jpg
Удалить редактировать 2 гитарное крыло pic2.jpg
[LabelId]
[Имя метки]
То, что я пытаюсь сделать, это то, что всякий раз, когда я нажимаю кнопку Удалить или изменить и обновить кнопку, она должна получить значение в имени столбца. Например, если я нажму кнопку редактирования для 2-й строки, она должна получить имя "Fender" и отобразить его на [LabelName] вместе с его [LabelId]. Кроме того, если я нажму кнопку Удалить для 1-й строки, она должна получить имя "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>
И здесь это реализовано.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; } }
Richard Deeming
GridView1.Rows[gridrow.RowIndex]
Вы можете заменить это на:
gridrow
Вы уже извлекли строку; вам не нужно искать ее снова.
Кроме того,
as
оператор может вернуться null
если объект является null
или не того типа, который ожидался. Вам либо нужно будет проверить null
, или вместо этого используйте гипс:Button btn2 = (Button)sender; GridViewRow gridrow = (GridViewRow)btn2.NamingContainer;
BebeSaiyan
Извините, не могли бы вы подробнее рассказать о части gridview? А также для 2-го решения, это дает мне эту ошибку: не вызываемый член 'Button' не может быть использован как метод.