我有一个GridView,我通过C#通过LINQ更新它。我想访问GridView中的元素并将它们存储在变量中。然后我将这些变量传递给我的LINQ查询。
我应该如何访问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 :(得分:2)
像Produce_ID这样的东西听起来像一个关键字段,如果是,你可以做
var keyValue = gvShowComm.DataKeys[e.RowIndex].Value;
if(keyValue!=null)
int Product_ID = Convert.ToInt32(keyValue);
或者
您可以使用e.NewValues[]
和e.OldValues[]
。
答案 1 :(得分:1)
GridViewUpdateEventArgs上有属性,可让您访问特定行的Keys,OldValues和NewValues个集合。
你可以访问它:
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...
}
但这很糟糕! ASP.Net可以使用其中一个可用的DataSource类为您完成工作。出于您的目的,您应该查看LinqDataSource
值得注意的是,尽管DataSource类可以很有用且很好,但它们还有很多魔力,而且你几乎可以抛弃使用任何可测试模式的可能性。 (见WebFormsMVP)
如果这不是一个问题,那就去吧。但从长远来看,实现清晰的关注分离更好。在这种情况下,您需要围绕业务逻辑实现Facade包装,并使用ObjectDataSource。
无论哪种方式,你最好还是在键/值对集合中手动查找值,然后将它们转换回适当的类型。