DataKeyNames用于具有不同主键名的不同表
本文关键字:用于 DataKeyNames | 更新日期: 2023-09-27 18:12:49
我想知道如果这些主键名称在这些表中不同,是否有一种方法可以使用datakeynames来访问不同表的主键。
例如,我有一个名为Table1和Table2的表,其中主键分别是Table1ID和Table2ID。
我的最终目标是将两个表的内容合并到一个gridview中,并为每一行生成一个超链接。所以我的c#看起来像这样:
protected void Page_Load(object sender, EventArgs e)
{
SqlCommand command = new SqlCommand("(SELECT Table1ID, Title FROM Table1" +
"UNION ALL SELECT Table2ID, Title FROM Table2)", connection);
GridView1.DataBind();
}
然后在我的Gridview_Databound方法中,我逐一为每一行设置超链接。问题是我如何访问Table1ID和Table2ID?在我的。aspx代码中,我可以将其设置为BoundField,因为数据字段将不一致?我不能这样做,因为它忽略了Table2ID ?
<asp:BoundField DataField="Table1ID"/>
也许我需要使用templateField或其他东西?
可以像下面的代码那样使用templatefield
<asp:TemplateField HeaderText="Action">
<ItemTemplate>
<asp:LinkButton runat="server" ID="lnkEdit" ToolTip="Click to edit" CommandName="EditContent" CommandArgument='<%# Eval("Table1ID") %>' />
</ItemTemplate>
</asp:TemplateField>
现在你的OnRowCommand="GridView1_RowCommand"你会得到这个表的pk id
在GridView
控件中,您可以有一个包含Hyperlink
的TemplateField
(请参阅我的文章的链接以了解此解决方案的详细信息)。
同样,如果使用SqlDataSource
将选择语句赋值给它的属性并将其传递给GridView.DataSource
属性,可能会减少劳动密集型。只需要几行代码就可以完成这项工作。问候,AB