【发布时间】:2011-03-30 15:13:36
【问题描述】:
我必须显示字段列表。有些是可编辑的,有些则不是。那些可以是不同的类型,例如文本字段、日期、时间或布尔值。我正在使用 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;
}
}
}
【问题讨论】:
-
我切换到 OnItemDataBound 事件并使用 ItemIndex 而不是 RowIndex。这给了我一个从 0 到 9 的索引值,显然第 0 列和第 1 列总是为命令项创建的。我没有按索引引用,而是更改为唯一的列名。 // 设置第一列的文本 item["FieldDisplayName"].Text = "Field " + index; // 在第二列添加控件 RadTextBox txt = new RadTextBox(); txt.ID = "RadTextBox1"; txt.Text =“你好”+索引; item["FieldValue"].Controls.Add(txt);
标签: asp.net telerik telerik-grid