3

我正在尝试对GridView. 根据我在网上阅读的内容,有几种方法可以执行此类操作。所有这些方法看起来都非常复杂,并且涉及到大量的手动管道。

例如,为了从 a 中“删除”一个项目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);
    }
}

OnClick2:向“删除”按钮提供事件

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

您将如何执行这样的操作?有一个更好的方法吗?

4

4 回答 4

1

根据自己的喜好选择 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。

于 2013-05-03T08:49:04.100 回答
1

您是否查看过 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);
}
于 2013-05-03T08:53:30.643 回答
1
In short, whatever works for you in the current situation.

如果您使用带有用于插入、更新、删除的修饰方法的数据访问层,则可以避免使用管道代码。您只需在数据源上指定方法,一切都应该开箱即用。

在我的业务逻辑层中,我有这些方法可以命中 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 页面上不需要任何管道代码。

于 2013-05-03T08:53:31.707 回答
1

您有一个 Gridview 来执行删除或更新等操作,因为我知道的最简单的方法是使用 gridview 右侧的快速任务菜单。

1)单击编辑列
2)单击命令字段
3)然后将删除更新和取消按钮添加到 gridview 以删除行。

在 youtube 上查看 asp.net 的智能方法课程..希望这很有用..

于 2013-05-03T08:43:32.340 回答