В RadGrid, как мы можем объединить 2 столбца данных только для просмотра, но при этом иметь возможность редактировать их отдельно? - PullRequest
3 голосов
/ 18 июля 2010

У меня есть RadGrid Telerik, который имеет 2 столбца, как это:

<Columns>
 <telerik:GridBoundColumn HeaderText="AirlineCode" UniqueName="AirlineCode" DataField="airlineCode" />
 <telerik:GridBoundColumn HeaderText="FlightNumber " EditFormColumnIndex="1" DataField="flightNumber" />
 ... 
 ... 
 ... more code, but unrelevant to the question here.
</Columns>

Я предоставляю данные для обоих столбцов в соответствующей функции NeedDataSource ().

Таким образом, это правильно выглядит так:

 | AirlineCode      |      FlightNumber   | 
 ------------------------------------------
 | Delta            |      2393           | 
 | Southwest        |      345            | 

Но теперь мое требование немного изменилось.

Для просмотра я хочу объединить их и показать так:

 |     Flight             |
 --------------------------
 |     Delta-2393         | 
 |     Southwest-345      | 

Однако при редактировании строк пользователь должен иметь возможность редактировать «AirlineCode» и «Номер рейса» отдельно. И значения все равно должны правильно поддерживаться в источнике данных.

Я знаю, что если мы хотим, чтобы пользователь по-разному "просматривал" и "редактировал", нам пришлось бы использовать.

Итак, я пытаюсь что-то вроде этого:

<Columns>
 <telerik:GridTemplateColumn EditFormColumnIndex="0" HeaderText="Flight">
   <ItemTemplate>
  <%#DataBinder.Eval(Container.DataItem, "airlineCode")%>
  <asp:Literal runat="server" Text="-"></asp:Literal>
  <%#DataBinder.Eval(Container.DataItem, "flightNumber")%>
   </ItemTemplate>
   <EditItemTemplate>
  <telerik:GridBoundColumn HeaderText="AirlineCode" UniqueName="AirlineCode" DataField="airlineCode" />
  <telerik:GridBoundColumn HeaderText="FlightNumber " EditFormColumnIndex="1" DataField="flightNumber" />
   </EditItemTemplate>
 </telerik:GridTemplateColumn> ... 
 ... 
 ... more code, but unrelevant to the question here.
</Columns>

Но это не работает.

Эти две строки внутри содержат предупреждения:

Элемент 'GridBoundColumn' не является известным элементом. Это может произойти, если на веб-сайте произошла ошибка компиляции или отсутствует файл web.config.

Возможно, я делаю это неправильно. Нужна помощь.

Любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 20 июля 2010

drpcken правильно. Когда вы используете GridTemplateColumn, вам не нужно использовать GridBoundColumn. Вместо этого вы предоставляете шаблон HTML просмотра и редактирования и используете выражение Bind для двусторонней привязки в шаблоне редактирования. Например:

<telerik:GridTemplateColumn UniqueName="TemplateColumn">                          
         <ItemTemplate>
              <%# Eval("airlinCode") %> - <%# Eval("flightNumber") %>
          </ItemTemplate>
          <EditItemTemplate>
              <table>
                 <tr>
                   <td style="width: 50%">
                     <asp:TextBox runat="server" Text='<%# Bind("airlineCode") %>' />
                   </td>
                   <td style="width: 50%">
                      <asp:TextBox runat="server" Text='<%# Bind("flightNumber") %>' />
                   </td>
                  </tr>
               </table>
          </EditItemTemplate>
</telerik:GridTemplateColumn>

Как видите, вы используете Eval в ItemTemplate и Bind в EditItemTemplate. Весь другой код должен продолжать работать без изменений.

Позвольте мне также выделить форумы Telerik. По конкретным вопросам Telerik существует активное сообщество, которое может помочь в устранении неполадок: www.telerik.com / forums

0 голосов
/ 18 июля 2010

Прошло много времени с тех пор, как я использовал radgrid, но в вашем шаблоне редактирования я считаю, что вам нужно удалить GridBoundColumns и поместить два элемента управления textbox, разделенных чертой. Затем используйте свой Databinder, чтобы заполнить эти текстовые поля. Извините, я не могу быть более кратким, поскольку я печатаю на своем iPhone и не могу проверить. Я свяжусь с тобой, когда буду перед своей машиной.

Удачи!

...