BebeSaiyan Ответов: 1

Как создать пользовательское удаление и редактирование в 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' не может быть использован как метод.

1 Ответов

Рейтинг:
0

Graeme_Grant

Вы опубликовали этот же вопрос 9 часов назад: Создание пользовательской кнопки редактирования в gridview с помощью ASP.NET?[^]

Пожалуйста, воздержитесь от публикации одного и того же вопроса несколько раз.


BebeSaiyan

На самом деле у них разные цели. Предыдущая ссылка имеет проблему исключения, в то время как мой вопрос здесь, вывод на самом деле работает с нежелательными результатами и без проблем исключения. Это огромная разница.