GridView 模板 - 如何从选定行获取数据
<asp:TemplateField>
<ItemTemplate>
<table width="540" cellpadding="5">
<tr>
<td align="left" style="width:60%;">
<img src='PurchaseHandler.ashx?ProductID=<%# Eval("ProductID")%>'
alt="<%# Eval("ProductName") %>" />
</td>
<td align="left">
<h3 style="text-align:left;">
<asp:Label ID="nameLabel" runat="server"
Text='<%# Eval("ProductName") %>' />
</h3>
<asp:Label ID="priceLabel" runat="server" Text='<%# Eval("Price") %>' />
<br />
<asp:LinkButton ID="cartLink" runat="server" Text="<b>Add to Cart</b>"
CommandName="Add" CommandArgument='<%# Eval("ProductID") %>' />
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
我正在使用购物车业务对象,其中包含不用于在 GridView 中显示的字段。我接下来在 RowCommand 事件处理程序中尝试执行的操作是从所选行中检索其余的数据字段。这为我提供了所选行中的正确产品 ID:
if (e.CommandName == "Add")
{
int productID = 0;
int.TryParse(e.CommandArgument as string, out productID);
// Big blank!
}
如何从所选行中获取其余数据字段来填充我的购物车?作为解释,我可能可以使用 ProductID 来深入研究从会话状态中提取的数据集,并以这种方式获取数据。但是,我想要确定的是是否有与此类似的语法可以在这种情况下使用?
DataRow[] rows = ds.Tables[0].Select("ProductID=" +
gridProducts.SelectedDataKey.Values["ProductID"].ToString());
DataRow row = rows[0];
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
执行此操作的一种方法是使用命令参数来存储行索引(可能在 on row created 事件中设置它)。
然后,您可以使用如下代码来访问您的行(代码摘自 MSDN):
如果您需要将命令参数保留为产品 id,那么您可以使用下面的代码来访问该行:
然后您可以使用
的 FindControl() 方法GridViewRow
选择您需要的控件。在 OP 发表评论后进行编辑
所以,如果我是正确的,您想访问您所在行的 DataItem 吗?
我认为这在 RowCommand 事件处理程序中是不可能的 - 我在其他论坛上做了一些挖掘,显然这个属性在
DataBind
期间不为空 - MSDN 有 这 说:看起来你的方法或类似的方法是链接回 RowCommand 中原始对象的唯一方法(希望有人证明我错了)
One way to do this would be to use the command argument to store the row index (perhaps setting it in the on row created event).
You could then use code as below to access your row (code snipped from MSDN):
If you need to keep your command argument as the product id then you can use the code below to access the row:
You can then use the FindControl() method of the
GridViewRow
to select the controls that you need.Edit after comments from OP
So if I'm correct, you want to access the DataItem of your row?
I don't think this is possible within a RowCommand event handler - I did a little bit of digging on other forums and apparently this property is only not null during
DataBind
- MSDN has this to say:Looks like your method or something similar is the only way of linking back to the original objects in the RowCommand (hopefully someone proves me wrong)