首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gridview_rowdeleting事件删除行

使用gridview_rowdeleting事件删除行
EN

Stack Overflow用户
提问于 2013-09-18 11:56:26
回答 3查看 8.1K关注 0票数 0

我正试图以编程方式删除网格视图中的一行

我创建了这个GridView

代码语言:javascript
复制
<asp:GridView ID="GridView1" CssClass="HeaderTables" runat="server" AllowPaging="True" 
    EmptyDataText="There is no data record to display"
    AllowSorting="True" AutoGenerateColumns="false"
    CellPadding="0" Height="0px" Width="800px"
    onpageindexchanging="GridView1_PageIndexChanging" 
    onsorting="GridView1_Sorting" onrowdeleting="GridView1_RowDeleting">
    <Columns>
        <asp:BoundField DataField="first_name" HeaderText="First name"/>
        <asp:BoundField DataField="last_name" HeaderText="Last name"/>
        <asp:BoundField DataField="mobile_phone" HeaderText="Mobile number"/>
        <asp:BoundField DataField="email" HeaderText="Email"/>
        <asp:BoundField DataField="city" HeaderText="City"/>
        <asp:BoundField DataField="street_number" HeaderText="Street number"/>

        <asp:CommandField ShowEditButton="True" ButtonType="Button" />
        <asp:CommandField ShowDeleteButton="True" ButtonType="Button" />
    </Columns>
    <HeaderStyle HorizontalAlign="Left" />
    <RowStyle HorizontalAlign="Left" />
</asp:GridView>  

我背后的代码是:

代码语言:javascript
复制
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    if (MessageBox.Show("Are you sure you want to delete this data?",
   "Confirm delete", MessageBoxButtons.YesNo) == DialogResult.Yes)
    {

        MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["mySqlString"].ConnectionString);
        MySqlCommand cmd = new MySqlCommand("DELETE FROM persons WHERE id = @id", conn);
        MySqlParameter param = new MySqlParameter();

        try
        {
            int rowID = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);
            cmd.Parameters.AddWithValue("@id", rowID);
            conn.Open();
            cmd.ExecuteNonQuery();
            GridView1.DataBind();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            conn.Close();
        }
    }
}  

我得到了错误:

指数超出了范围。必须是非负的,并且小于集合的大小。参数名称:索引

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-18 12:02:46

您的网格没有设置DataKeyNames属性,因此该网格没有跟踪任何数据类型。也许这就是为什么您要得到一个索引错误。

您应该设置DataKeyNames属性。在您的代码中,还需要检查以确保集合包含elements.The数据集本身可能不是null,但它可以包含零元素。

票数 1
EN

Stack Overflow用户

发布于 2013-09-18 12:04:53

使用DataKeyNames="ID"

代码语言:javascript
复制
<asp:GridView ID="GridView1" CssClass="HeaderTables" runat="server" AllowPaging="True" 
    EmptyDataText="There is no data record to display" DataKeyNames="ID"
    AllowSorting="True" AutoGenerateColumns="false"
    CellPadding="0" Height="0px" Width="800px"
    onpageindexchanging="GridView1_PageIndexChanging" 
    onsorting="GridView1_Sorting" onrowdeleting="GridView1_RowDeleting">
    <Columns>
        <asp:BoundField DataField="first_name" HeaderText="First name"/>
        <asp:BoundField DataField="last_name" HeaderText="Last name"/>
        <asp:BoundField DataField="mobile_phone" HeaderText="Mobile number"/>
        <asp:BoundField DataField="email" HeaderText="Email"/>
        <asp:BoundField DataField="city" HeaderText="City"/>
        <asp:BoundField DataField="street_number" HeaderText="Street number"/>

        <asp:CommandField ShowEditButton="True" ButtonType="Button" />
        <asp:CommandField ShowDeleteButton="True" ButtonType="Button" />
    </Columns>
    <HeaderStyle HorizontalAlign="Left" />
    <RowStyle HorizontalAlign="Left" />
</asp:GridView>  

然后它会对你起作用

票数 0
EN

Stack Overflow用户

发布于 2013-09-18 13:53:34

忘记将DataKeyNames添加到网格视图中

代码语言:javascript
复制
DataKeyNames="Valid Column Name" //Column name here instead of Valid Column name

以下是完整的法典:

代码语言:javascript
复制
<asp:GridView ID="GridView1" DataKeyNames="Valid Column Name"  CssClass="HeaderTables" runat="server" AllowPaging="True" 
    EmptyDataText="There is no data record to display"
    AllowSorting="True" AutoGenerateColumns="false"
    CellPadding="0" Height="0px" Width="800px"
    onpageindexchanging="GridView1_PageIndexChanging" 
    onsorting="GridView1_Sorting" onrowdeleting="GridView1_RowDeleting">
    <Columns>
        <asp:BoundField DataField="first_name" HeaderText="First name"/>
        <asp:BoundField DataField="last_name" HeaderText="Last name"/>
        <asp:BoundField DataField="mobile_phone" HeaderText="Mobile number"/>
        <asp:BoundField DataField="email" HeaderText="Email"/>
        <asp:BoundField DataField="city" HeaderText="City"/>
        <asp:BoundField DataField="street_number" HeaderText="Street number"/>

        <asp:CommandField ShowEditButton="True" ButtonType="Button" />
        <asp:CommandField ShowDeleteButton="True" ButtonType="Button" />
    </Columns>
    <HeaderStyle HorizontalAlign="Left" />
    <RowStyle HorizontalAlign="Left" />
</asp:GridView>  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18871621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档