2014-07-11 65 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; 
     } 
    } 
}