C# 关于删除数据网格的问题

C# 关于删除数据网格的问题,c#,asp.net,c#-4.0,C#,Asp.net,C# 4.0,我已将数据网格绑定到数组。此外,还有一个用于删除行的按钮。问题是我不确定如何实现它,因为数据源是一个数组 见下文 <Columns> <asp:TemplateColumn> <ItemTemplate> <asp:Label ID="lblItems" runat="server" Text='<%# Container.DataItem>' /

我已将数据网格绑定到数组。此外,还有一个用于删除行的按钮。问题是我不确定如何实现它,因为数据源是一个数组

见下文

  <Columns>    
     <asp:TemplateColumn>        
            <ItemTemplate>          
       <asp:Label ID="lblItems" runat="server" Text='<%# Container.DataItem>' />         
       </ItemTemplate>    
     </asp:TemplateColumn>     
        <asp:ButtonColumn ButtonType="PushButton" CommandName="Delete" Text="Delete">
          </asp:ButtonColumn>
                 </Columns> 

在删除代码中,如何根据单击的按钮访问数组的索引(每行)?

您是否尝试使用下面的方法访问src对象(请注意,这是gridview上的“行删除”事件)

还有其他一些技巧,比如在行的hiddenfield中存储id,然后在delete命令上搜索控件并提取值。我的偏好是上述方法,但实际上取决于你的目标是什么

    protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        HiddenField field = (HiddenField)gv.Rows[e.RowIndex].FindControl("myHiddenField");
        string myValue = field.Value;

        // delete it and rebind
    }

您是否尝试使用下面的方法访问src对象(请注意,这是gridview上的“RowDeleting”事件)

还有其他一些技巧,比如在行的hiddenfield中存储id,然后在delete命令上搜索控件并提取值。我的偏好是上述方法,但实际上取决于你的目标是什么

    protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        HiddenField field = (HiddenField)gv.Rows[e.RowIndex].FindControl("myHiddenField");
        string myValue = field.Value;

        // delete it and rebind
    }
这里有一个例子

标记

<asp:DataGrid ID="DataGrid1" runat="server"
        AutoGenerateColumns="False" 
        OnDeleteCommand="DataGrid1_DeleteCommand">
    <Columns>
        <asp:TemplateColumn HeaderText="Name">
            <ItemTemplate>
                <asp:Label ID="lblItems" runat="server" 
                    Text='<%# Container.DataItem %>'>
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateColumn>
        <asp:ButtonColumn ButtonType="PushButton" 
                CommandName="Delete" 
                HeaderText="Actions" 
                Text="Delete">
        </asp:ButtonColumn>
    </Columns>
</asp:DataGrid>
希望这能有所帮助。

下面是一个例子

标记

<asp:DataGrid ID="DataGrid1" runat="server"
        AutoGenerateColumns="False" 
        OnDeleteCommand="DataGrid1_DeleteCommand">
    <Columns>
        <asp:TemplateColumn HeaderText="Name">
            <ItemTemplate>
                <asp:Label ID="lblItems" runat="server" 
                    Text='<%# Container.DataItem %>'>
                </asp:Label>
            </ItemTemplate>
        </asp:TemplateColumn>
        <asp:ButtonColumn ButtonType="PushButton" 
                CommandName="Delete" 
                HeaderText="Actions" 
                Text="Delete">
        </asp:ButtonColumn>
    </Columns>
</asp:DataGrid>
希望这有帮助

private static string[] names = new string[] { "Matt", "Joanne", "Robert" };
protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        BindGrid();
    }
}
private void BindGrid()
{
    DataGrid1.DataSource = names;
    DataGrid1.DataBind();
}
protected void DataGrid1_DeleteCommand(object source, DataGridCommandEventArgs e)
{
    string deletedItem = ((Label) DataGrid1.Items[e.Item.ItemIndex].FindControl("lblItems")).Text;
    names = names.Where(val => val != deletedItem).ToArray();
    BindGrid();
}