【问题标题】:Telerik RadGrid with different types of edit controlsTelerik RadGrid 具有不同类型的编辑控件
【发布时间】: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


【解决方案1】:

如果网格反映了您的实际需要,我建议您在 ASP FormView 中使用 HTML 表格。您可以直接在 HTML 中映射您在此处显示的大部分内容。那里有很多 FormView 教程,它看起来更像是您所追求的解决方案。不要让试图将这些东西挤进 radgrid 的复杂性让你走错了方向。

如果您想一次显示 10 条记录,那么 gridview/radgrid 就派上用场了,如果一次只显示一条记录,请查看 formview。

编辑:我刚刚注意到这是在一年前被问到的。我希望你还没有等待这个答案!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多