2014-07-11 29 views
1

我可以根据代码背后的数据创建不同的控件,每列都有效,它可以工作。RadGrid - 按列编辑多个编辑模板

我想在后面的代码中为每行创建不同的控件。 例如:

<EditMode> 
      ColumnA    ColumnB 
Row I: RadComboBox   RadComboBox 
Row II: RadNumericTextBox RadNumericTextBox 
Row III: CheckBox   CheckBox 
... 

的问题是抗辐射网格批处理模式只需要在一个编辑模板用于每个列的一个控制,这意味着所有的行具有相同的编辑模板和控制。

这个我能做到

 ColumnA (RadComboBox)  ColumnB(RadNumericTextBox) 
    Row I: RadComboBox    RadNumericTextBox 
    Row II: RadComboBox    RadNumericTextBox 
    Row III: RadComboBox    RadNumericTextBox 

是否有可能每列多编辑模板或什么是我的选择吗?

回答

0

您可以将控件添加到网格的ItemDataBound事件中的单元格。在下面的示例中,我将单元格的内容更改为您列出的控件类型,而不是仅显示其默认文本ID。你可以根据你的情况做同样的事情。我在rgTest_OnNeedDataSource方法中使用测试数据填充示例网格,然后在rgTest_ItemDataBound方法中应用更改。

ASPX:

<telerik:RadGrid ID="rgTest" runat="server" PageSize="10" GridLines="None" AccessKey="0" Skin="Office2007" 
OnNeedDataSource="rgTest_OnNeedDataSource" OnItemDataBound="rgTest_ItemDataBound" AllowFilteringByColumn="true" AllowPaging="true" AllowSorting="true" AutoGenerateColumns="false" ImagesPath="~/Skins/Office2007/Grid/Images"> 
    <MasterTableView> 
     <Columns> 
      <telerik:GridBoundColumn UniqueName="ID" DataField="ID" SortExpression="ID" HeaderText="ID" HeaderStyle-Width="40px" FilterControlWidth="40px" AllowSorting="true" AllowFiltering="true" AutoPostBackOnFilter="false" ShowFilterIcon="true" /> 
      <telerik:GridBoundColumn UniqueName="Value" DataField="Value" SortExpression="Value" HeaderText="Value" HeaderStyle-Width="80px" FilterControlWidth="40px" AllowSorting="true" AllowFiltering="true" AutoPostBackOnFilter="false" ShowFilterIcon="true" /> 
     </Columns> 
    </MasterTableView> 
</telerik:RadGrid> 

aspx.cs:

protected void rgTest_OnNeedDataSource(object source, GridNeedDataSourceEventArgs e) 
{ 
    DataTable batchChecks = new DataTable("checksRandomName"); 
    batchChecks.Columns.Add("ID"); 
    batchChecks.Columns.Add("Value"); 
    batchChecks.Rows.Add(new ArrayList() { "1", "ABC" }.ToArray()); 
    batchChecks.Rows.Add(new ArrayList() { "2", "BCD" }.ToArray()); 
    batchChecks.Rows.Add(new ArrayList() { "3", "CDE" }.ToArray()); 
    batchChecks.Rows.Add(new ArrayList() { "4", "DEF" }.ToArray()); 
    DataSet dsBatch = new DataSet("rcBatch"); 
    dsBatch.Tables.Add(batchChecks); 
    rgTest.VirtualItemCount = dsBatch.Tables.Count; 
    rgTest.DataSource = dsBatch; 
} 

protected void rgTest_ItemDataBound(object sender, Telerik.Web.UI.GridItemEventArgs e) 
{ 
    if (e.Item is GridDataItem) 
    { 
     GridDataItem item = (GridDataItem)e.Item; 
     TableCell cell = item["Id"]; 
     switch (cell.Text) 
     { 
      case "1": 
       cell.Controls.Add(new RadComboBox()); 
       break; 
      case "2": 
       cell.Controls.Add(new RadNumericTextBox()); 
       break; 
      case "3": 
       cell.Controls.Add(new System.Web.UI.WebControls.CheckBox()); 
       break; 
     } 
    } 
}