具有不同主键名称的不同表的DataKeyNames

时间:2013-05-08 02:48:30

标签: c# asp.net primary-key datakey

我想知道是否有办法使用datakeynames来访问不同表的主键,如果这些表中的主键名不同。

例如,我有一个名为Table1和Table2的表,其中主键分别是Table1ID和Table2ID。

我的最终目标是将两个表的内容组合成1个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,因为DataField不一致吗?我不能只做以下因为它忽略了Table2ID吗?

  <asp:BoundField DataField="Table1ID"/>

也许我需要使用templateField或其他东西?

2 个答案:

答案 0 :(得分:1)

您可以使用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。

答案 1 :(得分:0)

GridView控件中,您可以TemplateField包含Hyperlink(有关此解决方案的详细信息,请参阅我的文章的link)。

此外,如果您使用SqlDataSource将select语句分配给其属性并将其传递给GridView.DataSource属性,则可能会减少劳动强度。只需几行代码即可完成工作。此致,AB