簡體   English   中英

如何以編程方式在ASP.NET DataGrid中插入其他行?

[英]How can I programmatically insert an additional row into an ASP.NET DataGrid?

我想以編程方式將其他行插入到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>

我想使用這種方法,而不是操縱數據源本身。 可能出什么問題了?

問題得以解決-在現有代碼的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);
    }      

}

我只是使用您發布的代碼嘗試了一個孤立的示例,它的工作原理很好。 它必須與DataGrid的配置或代碼中的其他地方有關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM