【问题标题】:bind dynamic columns template field in gridview from code behind C#从 C# 后面的代码绑定 gridview 中的动态列模板字段
【发布时间】:2016-03-24 15:49:07
【问题描述】:

我已经使用将返回动态列的数据透视(动态查询)存储了过程。喜欢

ItemId   A         B              c
------   --        --            --
1        A_Value1   B_Value1     C_Value1
16       A_Value2   B_Value2     C_Value2

这里的 A,B,C 是动态列。有时 A 只出现或 A、B、C、D、E 等,因为它的数据透视表。
然后, 我将在gridview中绑定该结果。

我的要求是,我想将该结果 gridview 的模板字段与链接按钮绑定。因为我想为每一列做行命令事件。
对于 C 列,我的命令参数应该是这样的

CommandArgument = ColumnName+","+ItemID_Value;


CommandArgument = "A,16"; 这该怎么做 。请帮忙。

【问题讨论】:

  • AutoGenerateColumns 可以为您创建 GridView 列,但它们将是 BoundFields。因此,您可能必须在代码隐藏中手动创建字段(通过根据 DataView 的内容将 TemplateFields 添加到 GridView 的 Columns 属性)。至于 LinkBut​​tons,我不确定你想要它们在哪里。在每个数据项(例如 A_Value1)上?还是仅在 ItemId 列上?
  • 是的,我想要每个数据项的链接按钮。表示 A_Value1 是链接按钮,B_Value1 是链接 btn,除 itemID 列外,所有列值都是链接按钮。
  • @ConnorsFan 我会检查并通知您。

标签: c# asp.net gridview


【解决方案1】:

你已经回答了:)

<asp:TemplateField HeaderText="A">
   <ItemTemplate>
       <asp:LinkButton runat="server" ID="lnkModify" Text="Edit" CommandName="MyCommand">
       </asp:LinkButton>
   </ItemTemplate>
</asp:TemplateField>

OnRowDataBound(或直接在aspx中)

MyClass item = e.Row.DataItem as MyClass;
LinkButton lnk = (LinkButton)e.Row.FindControl("lnkModify");
lnk.CommandArgument = "A," + item.Id; 

编辑:对不起,我现在读到它们是动态列。 两种解决方案:

  1. 首先,您需要始终拥有所有列。然后你可以像上面那样编写代码,但你有动态的HeaderTextCommandArgument 可以读取 HeaderText(或相关列的索引)。然后,如果列不存在,您可以在 LinkButton 上使用 Visible

  2. 如果你不知道列数,你可以构建你的数据结构并使用AutoGenerateColumns="true"绑定数据。

如果你不需要分页,你可以使用嵌套的Repeater(一个用于ABCDE列,一个用于行)。

希望对你有帮助。

【讨论】:

  • 对不起,我编辑了答案。您能否更新您的问题,添加项目的数据/类结构?
  • 这类似于 autogenerateColumns=true,但除了 item_id 列之外,所有值都类似于链接 btn。当我们单击该链接 btn 时,我需要将两个值(列名和相应的 ItemID)传递给存储的 proc procB。
  • 您可以连接数据绑定项的两个字段
猜你喜欢
  • 1970-01-01
  • 2017-06-14
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多