我想知道是否有办法使用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或其他东西?
答案 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