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或其他东西?

DataKeyNames用于具有不同主键名的不同表

可以像下面的代码那样使用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控件中,您可以有一个包含HyperlinkTemplateField(请参阅我的文章的链接以了解此解决方案的详细信息)。

同样,如果使用SqlDataSource将选择语句赋值给它的属性并将其传递给GridView.DataSource属性,可能会减少劳动密集型。只需要几行代码就可以完成这项工作。问候,AB