在GridView行上执行操作的最佳方式

本文关键字:最佳 方式 操作 执行 GridView | 更新日期: 2023-09-27 18:12:01

我试图对GridView中的行执行操作。从我在网上看到的内容来看,有几种方法可以执行这些操作。所有这些方法看起来都非常复杂,并且涉及到很多手工管道。

例如,为了从GridView中"删除"一个项目,我遇到了这些方法:

1:使用GridView RowCommand事件:

protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
    GridViewRow gridviewRow = 
        CoordinateFilesGridView.Rows[Convert.ToInt32(e.CommandArgument)];
    MyEntity entity = (MyEntity)gridviewRow.DataItem;
    if(e.CommandName.Equals("Delete"))
    {
        // Perform delete action
        Delete(entity);
    }
}

2:为"Delete"按钮提供OnClick事件

public void Delete_Clicked(Object sender, System.EventArgs e)
{
    var item = ((sender as WebControl).NamingContainer as DataListItem);
    var rowID = int.Parse(((HiddenField)item.FindControl("rowID")).Value);
    GridViewRow gridviewRow = CoordinateFilesGridView.Rows[rowID];
    MyEntity entity = (MyEntity)gridviewRow.DataItem;
    // Perform delete action
    Delete(entity);
}

3:链接到URL并在Page_Load

中分解查询字符串
if (queryString != null && queryString["action"] != null)
{
    if (queryString["action"].Equals("delete") && queryString["rowID"] != null)
    {
        GridViewRow gridviewRow = 
            CoordinateFilesGridView.Rows[(int)queryString["rowID"]];
        MyEntity entity = (MyEntity)gridviewRow.DataItem;
        // Perform delete action
        Delete(entity);
    }
}

你会如何执行这样的操作?有更好的方法吗?

在GridView行上执行操作的最佳方式

根据自己的喜好选择1或2。

我通常会选择选项1只是因为它是内置的GridView按钮处理程序,所以如果你有多个按钮在你的行,你有一个方法来处理这些,你是重用代码-

GridViewRow gridviewRow = 
    CoordinateFilesGridView.Rows[Convert.ToInt32(e.CommandArgument)];
MyEntity entity = (MyEntity)gridviewRow.DataItem;

而不是添加多个单击事件,并可能将下面的代码添加到单个单击方法中。

var item = ((sender as WebControl).NamingContainer as DataListItem);
var rowID = int.Parse(((HiddenField)item.FindControl("rowID")).Value);

在一天结束的时候,这只是你自己的喜好。我在很多场合使用过1和2。我看不出你为什么要用3.

你有一个Gridview来执行诸如删除或更新之类的操作,我知道最简单的方法是使用Gridview右侧的quicktasks菜单。

1)点击编辑列
2)点击commandField
3)然后在gridview中添加delete update和cancel按钮来删除行。

查看聪明的方法教训asp.net在youtube..

你看过GridView的RowDeleting事件了吗?它只会在单击一行的Delete按钮时触发,因此您可以跳过当前检查e.CommandName的步骤。此外,你将能够检查e.Keys来获得你想要删除的实体的Id(假设你已经设置了GridView的DataKeyNames属性)。

<asp:GridView ID="CoordinateFilesGridView" runat="server" DataKeyNames="Id" OnRowDeleting="CoordinateFilesGridView_RowDeleting">
    <Columns>
    </Columns>
</asp:GridView>

protected void CoordinateFilesGridView_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    var entityId = int.Parse(e.Keys["Id"].ToString());
    DeleteEntity(entityId);
}
In short, whatever works for you in the current situation.

如果使用带有Insert、Update、Delete修饰方法的数据访问层,可以避免管道代码。你只需要在你的数据源上指定方法&一切都应该开箱即用

在我的业务逻辑层中,我有这些击中DAL的方法

    [DataObjectMethod(DataObjectMethodType.Update, true)]
    public static int UpdateItem(EmployeeItem myItem)
    {
        return EmployeeDB.UpdateItem(myItem);
    }
    [DataObjectMethod(DataObjectMethodType.Delete, true)]
    public static bool DeleteItem(EmployeeItem myItem)
    {
        return EmployeeDB.DeleteItem(myItem.EmployeeID);
    }

在我的表示层,我将对象数据源绑定到这些

 <asp:ObjectDataSource ID="odsSecCh" runat="server" DataObjectTypeName="myCompany.myProject.BO.EmployeeItem"
  DeleteMethod="DeleteItem" InsertMethod="SaveItem" OldValuesParameterFormatString="original_{0}"
 SelectMethod="GetListById" TypeName="myCompany.myProject.BLL.EmployeeManager">
  <SelectParameters>
      <asp:Parameter Name="empId" Type="Int32" />
  </SelectParameters>
</asp:ObjectDataSource>

这样,在使用相同gridview控件的其他aspx页面上不需要管道代码。