访问GridView中的项目

问题描述:

我有一个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

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

像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