在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);
}
}
你会如何执行这样的操作?有更好的方法吗?
根据自己的喜好选择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页面上不需要管道代码。