访问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>
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。
无论哪种方式,您最好的办法是在寻找值的键/值对集合中手动生根,然后将它们转换回适当的类型。
我有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[]
。
我试过了。我得到这个错误:索引超出范围。必须是非负数且小于集合的大小。 参数名称:index – 2011-04-08 15:25:26
+1。 @Nice_Name:在Gridviews标记中将Product_ID定义为DataKeyNames – naveen 2011-04-08 16:18:08
请提一下,如果网格通过自动生成列,绑定字段或tremplate字段绑定。还有你是否在gridview中设置了DataKeyNames? – naveen 2011-04-08 14:58:15