필드 목록을 디스패치해야합니다. 일부는 편집 가능하고 일부는 편집 불가능합니다. 텍스트 필드, 날짜, 시간 또는 부울과 같은 다른 유형이 될 수 있습니다. Telerik의 RadGrid를 사용하고 있습니다. 내가 만든 테스트 프로젝트를위한 스크린 샷.다른 유형의 편집 컨트롤이있는 Telerik RadGrid
질문 : 항목 생성기에서 4 셀이있는 이유는 무엇입니까? 표시 할 값을 셀 [2]과 셀 [3]에 채워야했습니다. AutoGenerateColumns를 false로 설정하고 두 개의 GridTemplateColumn 정의 만 있습니다.
왜 item.RowIndex가 두 가지로 세분화되어 최대 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
OnItemDataBound 이벤트로 전환하고 RowIndex 대신 ItemIndex를 사용했습니다. 그게 저에게 0-9에서 인덱스 값을 제공합니다. 분명히 명령 항목에 대해 열 0과 1이 생성됩니다. 인덱스로 참조하는 대신 고유 한 열 이름으로 변경했습니다. // 첫 번째 열에 텍스트를 설정하십시오. 항목 [ "FieldDisplayName"]. Text = "Field"+ index; // secon 열에 컨트롤 추가 RadTextBox txt = new RadTextBox(); txt.ID = "RadTextBox1"; txt.Text = "hello"+ index; 항목 [ "FieldValue"]. Controls.Add (txt); – BrianK