DataKeyNames для разных таблиц с разными именами первичного ключа
Мне интересно, есть ли способ использовать datakeynames для доступа к первичным ключам разных таблиц, если эти имена первичных ключей отличаются в этих таблицах.
Например, у меня есть таблица Table1 и Table2, где первичными ключами являются Table1ID и Table2ID соответственно.
Моя конечная цель - объединить содержимое обеих таблиц в один вид сетки и создать гиперссылку для каждой строки. Так что мой 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 ответа
Вы можете использовать поле шаблона, как показано ниже
<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
контролировать вы можете иметь TemplateField
содержащий Hyperlink
(см. ссылку на мою статью для деталей этого решения).
Кроме того, это может быть менее трудоемким, если вы используете SqlDataSource
присваивая свой оператор select его свойству и передавая его GridView.DataSource
имущество. Это займет всего несколько строк кода и сделает всю работу за вас. С уважением, AB