我想以编程方式将其他行插入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>
我想使用这种方法而不是操纵数据源本身。可能出现什么问题?
答案 0 :(得分:2)
问题解决了 - 在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);
}
}
答案 1 :(得分:1)
我刚刚使用您发布的代码尝试了一个孤立的示例,它运行得很好。它必须与您的DataGrid的配置或代码中的其他地方有关。