2013-06-25 3 views
1

Предположим, у меня есть эта таблица структуры:Игнорировать «Элемент с тем же ключом уже добавлен».

enter image description here

Для запроса ЗАПРОС как для таблицы, я создал представление с UNION.

В результате идентификационные данные для INVOICE_REQUEST_ID и DELIVERY_REQUEST_ID запрашиваются как REQUEST_ID. Чтобы определить тип, я создал фиктивный флагREQUEST_TYPE. Когда я пытаюсь привязать данные к GridView, как я и предсказывал, возникает ошибка: Элемент с тем же ключом уже добавлен.

UPDATE

Я использую пользовательский GridView с этим с CheckBox на моем GridViewControl.ascx:

<asp:Panel ID="pnlPc" runat="server" CssClass="div-grid" ScrollBars="Auto"> 
<asp:GridView ID="gvListing" runat="server" AllowPaging="True" AutoGenerateSelectButton="true" 
      OnRowDataBound="gvListing_RowDataBound" skinid="gvListing" 
      onselectedindexchanged="gvListing_SelectedIndexChanged" 
      onpageindexchanging="gvListing_PageIndexChanging" PageSize="50" > 

<FooterStyle CssClass="grid-footer" /> 

<Columns> 
<asp:TemplateField HeaderText="CheckAll"> 
<HeaderTemplate> 
<asp:CheckBox ID="chkSelectAll" runat="server" AutoPostBack="true" 
OnCheckedChanged="chkSelectAll_CheckedChanged" CssClass="select-all"/> 
</HeaderTemplate> 

<ItemTemplate> 
<asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="true" 
OnCheckedChanged="chkSelect_CheckedChanged" CssClass="listing-checkbox"/> 
</ItemTemplate> 

</asp:TemplateField> 

</Columns> 

</asp:GridView> 
</asp:Panel> 

и связать данные с этой C# код:

//assuming that ucLAD is the CustomGridView 
ucLAD.DataKeyName = def.ID_REQUEST; // here I assign the DataKeyName 
ucLAD.BindGrid(dt); //dt is a datatable that contains my view 

Мое решение:

  1. Игнорировать ошибку в try-catch. (Как я могу это сделать?)
  2. Чтобы создать составной ключ для REQUEST_ID и REQUEST_TYPE.
  3. Создайте фиктивный ключ для обоих типов запросов.
+0

Разделяя код, используемый для сетки поможет вам сказать точно, что исправить – nunespascal

+0

Ok сэр, позвольте мне обновите мой вопрос. –

+0

'DataKeyName' - это свойство сетки, а не пользовательского элемента управления. вы можете открыть сетку как общедоступную и использовать что-то вроде: 'ucLAD.gvListing.DataKeyName =" YOUR_KEY ";' Установка на пользовательский элемент управления не будет работать. P.S: Просто я отвечаю на вопросы, не делает меня сэр. – nunespascal

ответ

0

Чтобы установить ключ, чтобы иметь несколько столбцов, то есть только установить DataKeyNames

<asp:GridView ID="GridView1" runat="server" 
    AutoGenerateColumns="False" 
    DataKeyNames="REQUEST_ID,REQUEST_TYPE" 
    DataSourceID="LinqDataSource1"> 
+0

Сэр, но в моем случае у меня есть GridViewControl.ascx –

+0

Даже если ваша сетка находится в пользовательском элементе управления, у вас все еще есть «GridView» внутри этого пользовательского элемента управления, и вы можете установить его там. Вы можете открыть свойство сетки, создав соответствующее свойство для пользовательского элемента управления. – nunespascal

+0

Сэр проверить мое обновление. Где я могу это поставить? –