【问题标题】:C# Question About Delete Data GridC#关于删除数据网格的问题
【发布时间】:2011-06-09 01:29:06
【问题描述】:

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

见下文

  <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> 

在这里我想实现它..

   private void DataGrid1_DeleteCommand(object source,
                  System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
        int rowToDelete = e.Item.ItemIndex;

        myDataGrid.DataBind();
    }

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

【问题讨论】:

    标签: c# asp.net c#-4.0


    【解决方案1】:

    这是一个例子

    标记。

    <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();
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

          protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
          {
              MyObject o = (MyObject)gv.Rows[e.RowIndex].DataItem;
          }
      

      还有其他技巧,例如将 id 存储在行的隐藏字段中,然后在删除命令中搜索控件并提取值。我的偏好是上述方法,但实际上取决于您的目标是什么。

          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
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-31
        • 2016-02-20
        • 2010-12-10
        • 2021-05-23
        • 2011-11-23
        • 2013-02-12
        • 1970-01-01
        • 2011-12-11
        相关资源
        最近更新 更多