我正在尝试对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:向“删除”按钮提供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:链接到网址并在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);
}
}
您将如何执行此类操作?有更好的方法吗?
答案 0 :(得分:1)
你有一个Gridview来执行删除或更新等操作,因为我知道最简单的方法是使用gridview右侧的quicktasks菜单。
1)单击编辑列
2)单击commandField
3)然后向gridview添加删除更新和取消按钮以删除行。
在youtube上查看asp.net的智能方法课程..希望这很有用..
答案 1 :(得分:1)
根据您的喜好选择1或2。
我通常会选择选项1,因为它是内置的GridView
按钮处理程序,所以如果你的行中有多个按钮,你有一个处理这些按钮的方法,你正在重用代码 - < / p>
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的原因。
答案 2 :(得分:1)
您是否查看了GridView的RowDeleting
事件?只有在单击行的“删除”按钮时才会触发,因此您可以跳过当前正在检查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);
}
答案 3 :(得分: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页面上不需要管道代码。