2010-08-16 25 views
4

我必須顯示字段列表。有些是可編輯的,有些則不是。那些可以是不同的類型,如文本字段,日期,時間或布爾值。我正在使用Telerik的RadGrid。查看我製作的測試項目的截圖。Telerik RadGrid具有不同類型的編輯控件

問題: 在項目創建處理程序中,爲什麼有4個單元格?我必須填寫單元格[2]和單元格[3]以顯示值。我將AutoGenerateColumns設置爲false,並且我只有兩個GridTemplateColumn定義。

爲什麼item.RowIndex由2增加到20?當我有10行時。

有沒有更好的方法來做到這一點?

以下是我宣佈格:

 <telerik:RadGrid runat="server" ID="Grid1" Width="100%" Height="500px" GridLines="None" AutoGenerateColumns="false" 
     OnItemCreated="OnGridItemCreated" 
     OnNeedDataSource="OnGridNeedDataSource"> 
     <ItemStyle Wrap="true" /> 
     <AlternatingItemStyle Wrap="true" /> 
     <ClientSettings>      
      <Selecting AllowRowSelect="false" /> 
      <Scrolling AllowScroll="true" UseStaticHeaders="true" /> 
      <Resizing AllowColumnResize="true" ClipCellContentOnResize="true" ResizeGridOnColumnResize="true" EnableRealTimeResize="true" /> 
     </ClientSettings> 
     <MasterTableView> 
      <NoRecordsTemplate> 
       <asp:Label ID="lblNorec1" runat="server" Text="No records"></asp:Label> 
      </NoRecordsTemplate> 
      <Columns> 
       <telerik:GridTemplateColumn UniqueName="FieldDisplayName" HeaderText="Field Name"> 
        <ItemTemplate> 
        </ItemTemplate> 
       </telerik:GridTemplateColumn> 
       <telerik:GridTemplateColumn UniqueName="FieldValue" HeaderText="Value"> 
        <ItemTemplate> 
        </ItemTemplate> 
       </telerik:GridTemplateColumn> 
      </Columns> 
     </MasterTableView> 
    </telerik:RadGrid> 

/

/ grid needs datasource 
    protected void OnGridNeedDataSource(object source, GridNeedDataSourceEventArgs e) 
    { 
     // create a DataSource 
     DataSet ds = new DataSet(); 
     DataTable dt = new DataTable(); 
     dt.Columns.Add(new DataColumn("Field_Display_Name")); 
     dt.Columns.Add(new DataColumn("Field_Value")); 

    for (int i = 0; i < 10; ++i) 
    { 
     DataRow dr = dt.NewRow(); 
     dr["Field_Display_Name"] = "Item Id" + i.ToString(); 
     dr["Field_Value"] = "Value" + i.ToString(); 
     dt.Rows.Add(dr); 
    } 

    ds.Tables.Add(dt); 
    Grid1.DataSource = ds; 
} 

// grid item is created 
protected void OnGridItemCreated(object sender, GridItemEventArgs e) 
{ 
    if (e.Item is GridDataItem) 
    { 
     GridDataItem item = (GridDataItem)e.Item; 

     // fill in cells 2 and 3. Why are there 4? 

     Label lbl = new Label(); 
     lbl.Text = "Field " + item.RowIndex; 
     item.Cells[2].Controls.Add(lbl); 

     switch (item.RowIndex) 
     { 
      case 2: 
      case 8: 
       RadTextBox txt = new RadTextBox(); 
       txt.ID = "RadTextBox1"; 
       txt.Text = "hello " + item.RowIndex; 
       item.Cells[3].Controls.Add(txt); 
       break; 
      case 4: 
      case 10: 
       RadDatePicker dp = new RadDatePicker(); 
       dp.ID = "RadDatePicker1"; 
       dp.SelectedDate = DateTime.Now; 
       item.Cells[3].Controls.Add(dp); 
       break; 
      case 6: 
      case 12: 
       CheckBox cb = new CheckBox(); 
       item.Cells[3].Controls.Add(cb); 
       break; 
      default: 
       Label lbl2 = new Label(); 
       lbl2.Text = "Value " + item.RowIndex; 
       item.Cells[3].Controls.Add(lbl2); 
       break; 
     } 
    } 
} 

alt text http://img193.imageshack.us/img193/1254/customgrid.png

+0

我切換到OnItemDataBound事件,並使用ItemIndex而不是RowIndex。這給了我一個索引值0-9 顯然,列0和1總是爲命令項創建的。我沒有通過索引來引用,而是更改爲唯一的列名稱。 //設置第一列中的文本 item [「FieldDisplayName」] .Text =「Field」+ index; //在第二列中添加一個控件 RadTextBox txt = new RadTextBox(); txt.ID =「RadTextBox1」; txt.Text =「hello」+ index; item [「FieldValue」]。Controls.Add(txt); – BrianK 2010-08-16 21:35:29

回答

1

如果電網反映您的實際需求,我建議你去裏面的一個HTML表ASP FormView。您可以在HTML中將您在此處顯示的大部分內容映射出來。這裏有很多FormView教程,它看起來更像是一個解決方案。不要讓嘗試將這些東西壓縮成radgrid的複雜性讓你朝錯誤的方向發展。

如果您想一次顯示10條記錄,那麼這就是gridview/radgrid派上用場的地方,如果它一次只有一條記錄,請查看formview。

編輯:我剛剛注意到這是像一年前問。我希望你還沒有等待這個答案!

相關問題