【问题标题】:In RadGrid, how can we merge 2 datacolumns only for viewing, but still be able to edit them separately?在 RadGrid 中,我们如何合并 2 个数据列仅用于查看,但仍然可以单独编辑它们?
【发布时间】:2010-07-18 18:00:59
【问题描述】:

我有一个 Telerik 的 RadGrid,它有 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”和“Flight Number”。并且这些值仍应在数据源中正确维护。

我知道,如果我们希望用户以不同的方式“查看”和“编辑”,我们将不得不使用 .

所以我正在尝试这样的事情:

<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 文件,就会发生这种情况。

可能我做错了。需要帮助。

感谢任何帮助。

【问题讨论】:

    标签: telerik radgrid telerik-grid


    【解决方案1】:

    drpcken 是正确的。使用 GridTemplateColumn 时,不需要使用 GridBoundColumn。相反,您提供 View 和 Edit 模板 HTML 并使用 Bind 表达式在 Edit 模板中进行双向绑定。例如:

    <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>
    

    如您所见,您在 ItemTemplate 中使用 Eval,在 EditItemTemplate 中使用 Bind。所有其他代码应继续工作而无需更改。

    我还要强调一下 Telerik 论坛。对于 Telerik 的具体问题,有一个活跃的社区可以帮助解决问题:www.telerik.com/forums

    【讨论】:

      【解决方案2】:

      自从我使用 radgrid 已经有一段时间了,但在您的编辑模板中,我相信您需要删除 GridBoundColumns 并将两个文本框控件用破折号分隔。然后使用您的 Databinder 填充那些 txt 框。抱歉,由于我在 iPhone 上打字并且无法测试,所以我不能更简洁。当我在我的机器前时,我会跟进你。

      祝你好运!

      【讨论】:

      • 我想按照您的建议使用文本框。但是我不确定如何使用您刚才提到的数据绑定器部分。我希望其余代码(尤其是在 NeedDataSource() 中)保持不变。感谢您尽可能跟进。
      • 您需要使用 Databinder.Bind 而不是 Databinder.Eval 来绑定文本框并获取要传递给数据访问层或方法的值。而不是使用两个 GridBoundColumns,而是为 EditItemTemplate 使用一个带有两个 TextBoxes 的 GridTemplateColumn。对于 txtboxes 的 TextBoxes.Text 属性,使用
         -  
      • 抱歉,我在弄清楚如何标记代码时遇到了问题。该网站也是新手 :)
      • 对不起,我跟进晚了。我后来按照您的建议使用了 RadTextBox,它对我有用。谢谢。
      • 没问题。很高兴我能帮上忙,也很高兴你能成功!谢谢!
      猜你喜欢
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      相关资源
      最近更新 更多