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

Другие вопросы по тегам