2013-05-03 65 views
3

我正在嘗試對GridView中的行執行操作。根據我在網上閱讀的內容,有幾種方法可以執行此類操作。所有這些方法看起來都非常複雜,涉及很多手動管道。在GridView行上執行操作的最佳方式

例如,以 「刪除」 從GridView一個項目,我遇到這些方法:

1:使用GridViewRowCommand事件:

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:鏈接到一個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); 
    } 
} 

你將如何執行這樣的操作?有一個更好的方法嗎?

+0

將一個OnClick事件提供給「刪除」按鈕。因爲RowCommand每次檢查所有行的刪除操作 – 2013-05-03 08:21:05

+1

@SaroopTrivedi'RowCommand'不檢查所有行,只檢查點擊行。 – 2013-05-03 08:30:05

回答

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.

1

你有一個Gridview來執行諸如刪除或更新等操作,我知道的最簡單的方法是使用gridview右側的quicktasks菜單。

1)單擊編輯欄
2)單擊CommandField中
3),然後添加刪除更新和取消按鈕的GridView刪除行。

在YouTube的asp.net的

鑑於智能方法的經驗教訓。希望是有用的..

1

你看過GridView的RowDeleting事件嗎?它只會在單擊一行的刪除按鈕時觸發,因此您可以跳過當前正在檢查的步驟e.CommandName。 此外,您將能夠檢查e.Keys以獲取要刪除的實體的標識(假設您已設置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); 
} 
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> 

這樣,沒有管道代碼需要在其他aspx頁面上使用相同的gridview控件。

相關問題