【问题标题】:How can I programmatically insert an additional row into an ASP.NET DataGrid?如何以编程方式将附加行插入 ASP.NET DataGrid?
【发布时间】:2010-10-02 10:55:41
【问题描述】:

我想以编程方式在 DataGrid 中插入额外的行(作为副标题)。我在网上关注了一些文章(即来自http://aspalliance.com/723 的选项3),但它们都导致该行正确显示,但没有内容。

这是我正在使用的代码的重要部分:

private void MyDataGrid_ItemCreated(object sender, DataGridItemEventArgs e)
{

    // This method will create a subheading row if needed
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
        // TableCell
        TableCell tc = new TableCell();
        tc.Controls.Add(new LiteralControl("foo"));
        tc.ColumnSpan = e.Item.Cells.Count;

        // DataGridItem
        DataGridItem di = new DataGridItem(e.Item.ItemIndex + 1, 0, ListItemType.Item);
        di.Height = new Unit(100, UnitType.Pixel);
        di.CssClass = "testClass";
        di.Controls.Add(tc);

        // DataGrid Table
        DataGrid dg = (DataGrid)sender;
        Table childTable = (Table)dg.Controls[0];
        childTable.Rows.Add(di);
    }      

}

这会在正确的位置生成以下标记,但没有 LiteralControl("foo")

<tr class="testClass" style="height:100px;">
</tr>

我想使用这种方法而不是操纵数据源本身。可能出了什么问题?

【问题讨论】:

  • 我刚刚使用您发布的代码尝试了一个孤立的示例,它工作得很好。它必须与 DataGrid 的配置或代码中的其他内容有关。
  • 我已经给你的答案+1,但我打算在 48 小时过去后将我自己的答案标记为选择的答案 - 不是自私,而是因为它提供了更多关于问题的原因。

标签: c# asp.net datagrid


【解决方案1】:

问题已解决 - 在 2500 行现有代码隐藏中的某处,隐藏了第一列,有效地删除了我的添加。如果其他人有类似的问题,请注意。

编辑 - 这是我编写的代码,以一种相当通用的方式解决问题:

private void InsertDataGridRow(DataGrid dataGrid, int index, TableCell tc)
{
    DataGridItem di = new DataGridItem(index, 0, ListItemType.Item);

    // Check which columns are visible
    bool foundFirstVisibleColumn = false;
    int numberOfVisibleColumns = 0;
    foreach (DataGridColumn column in dataGrid.Columns)
    {
        if (column.Visible == true)
        {
            numberOfVisibleColumns++;
            foundFirstVisibleColumn = true;
        }

        // Add dummy columns in the columns that are hidden
        if (!foundFirstVisibleColumn)
        {
            di.Cells.Add(new TableCell());
        }

    }

    tc.ColumnSpan = numberOfVisibleColumns;
    di.Cells.Add(tc);
    Table t = (Table)dataGrid.Controls[0];
    t.Rows.Add(di);
}

上面可以这样称呼:

private void MyDataGrid_ItemCreated(object sender, DataGridItemEventArgs e)
{
    // This method will create a subheading row if needed
    if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
        TableCell tc = new TableCell();
        tc.Controls.Add(new LiteralControl("foo"));

        InsertDataGridRow(
            (DataGrid)sender,
            e.Item.ItemIndex + 1,
            tc);
    }      

}

【讨论】:

    【解决方案2】:

    我刚刚使用您发布的代码尝试了一个孤立的示例,它工作得很好。它必须与 DataGrid 的配置或代码中的其他内容有关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 2015-12-29
      • 2015-03-18
      相关资源
      最近更新 更多