2011-04-08 73 views
0

我有一個GridView,我通過C#通過LINQ更新它。我想訪問我的GridView中的元素並將它們存儲在變量中。然後我會將這些變量傳遞給我的LINQ查詢。訪問GridView中的項目

我該如何訪問GridView中的項目?這裏是我的代碼:

protected void gvShowComm_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    string productID = gvShowComm.DataKeys[e.RowIndex]["Product_ID"].ToString(); //Working! 
    string planName = gvShowComm.DataKeys[e.RowIndex]["PlanName"].ToString(); //Working! 
    string hiComm = gvShowComm.DataKeys[e.RowIndex]["HiCommissionOld"].ToString(); //Working! 
    string lowComm = gvShowComm.DataKeys[e.RowIndex]["LowCommissionOld"].ToString(); //Working! 

    gvShowComm.DataBind(); 
} 

標記:

<asp:GridView runat="server" Height="233px" Width="602px" ID ="gvShowComm" 
    CellPadding="4" ForeColor="#333333" GridLines="None" OnRowEditing = "gvShowComm_RowEditing" 
    OnRowUpdating = "gvShowComm_RowUpdating" 
    OnRowCancelingEdit = "gvShowComm_RowCancelingEdit" DataKeyNames = "Product_ID, PlanName, HiCommissionOld, LowCommissionOld">  
    <Columns> 
     <asp:CommandField ShowCancelButton="True" ShowEditButton="True" /> 
    </Columns> 
</asp:GridView> 
+0

請提一下,如果網格通過自動生成列,綁定字段或tremplate字段綁定。還有你是否在gridview中設置了DataKeyNames? – naveen 2011-04-08 14:58:15

回答

1

GridViewUpdateEventArgs具有的屬性可以讓您獲取特定行的Keys,OldValues和集合。

可能像這樣獲得的:

protected void gvShowComm_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    //Product_ID is a column that I am displaying in my GV! 
    int Product_ID = Int32.Parse(e.Keys["Product_ID"]); 

    Entity_Product_Point ev = new Entity_Product_Point(); 

    ev.MyDateTime = DateTime.Parse(e.NewValues["MyProp"]); 

    // And so on... 
} 

但這吸相當困難!使用可用的DataSource類之一,ASP.Net可以爲您完成這項工作。爲了您的目的,您應該查看LinqDataSource

值得注意的是,儘管DataSource類可以很有用並且很好用,但它們有相當多的魔力在發生,並且您幾乎可以拋出使用任何可測試的模式與他們。 (見WebFormsMVP

如果這不是一個問題,那就去吧。但從長遠來看,實現清晰的問題分離更好。在這種情況下,您需要在業務邏輯周圍實施封裝,並使用ObjectDataSource

無論哪種方式,您最好的辦法是在尋找值的鍵/值對集合中手動生根,然後將它們轉換回適當的類型。

+0

我有2個不同的數據庫,我正在更新我的值。在LDS中,您只能更新爲1-1基礎。這就是爲什麼我想要硬編碼的原因。 – 2011-04-08 15:16:55

2

像Produce_ID東西聽起來像一個關鍵領域,如果是這樣,你可以做

var keyValue = gvShowComm.DataKeys[e.RowIndex].Value; 
if(keyValue!=null) 
int Product_ID = Convert.ToInt32(keyValue); 

否則

您可以使用e.NewValues[]e.OldValues[]

+0

我試過了。我得到這個錯誤:索引超出範圍。必須是非負數且小於集合的大小。 參數名稱:index – 2011-04-08 15:25:26

+1

+1。 @Nice_Name:在Gridviews標記中將Product_ID定義爲DataKeyNames – naveen 2011-04-08 16:18:08