我的数据网格视图如下
RecordTypeCode Content
FileHeader 1111111111111
BatchHeader 5666666666666
EntryDetail 656546545644545
BatchControl 8654654564564
FileControl 945645
我想只在BatchHeader上设置复选框,并且可以使用EntryDetail。这是我将数据绑定到数据网格视图的方式
if (line.StartsWith("1"))
{
dcID = new DataColumn("RecordTypeCode");
dt.Columns.Add(dcID);
DataColumn dcSomeText = new DataColumn("Content");
dt.Columns.Add(dcSomeText);
dr = dt.NewRow();
dr["RecordTypeCode"] = filecontrolvariables.rectype[line.Substring(0, 1)].ToString();
dr["Content"] = line;
dt.Rows.Add(dr);
}
if (line.StartsWith("5"))
{
dr = dt.NewRow();
dr = dt.NewRow();
dr["RecordTypeCode"] = filecontrolvariables.rectype[line.Substring(0, 1)].ToString();
dr["Content"] = line;
dt.Rows.Add(dr);
}
我想根据需要添加复选框,任何人都可以帮助我
我试过这个
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
if (dataGridView2.Rows[e.RowIndex].Cells["RecordTypeCode"].Value.ToString() == "BatchHeader")
{
e.PaintBackground(e.ClipBounds, true);
e.Handled = true;
}
}
我的数据绑定时的示例图片
我试过这个
int columnIndex = -1;
int rowIndex = -1;
if (dataGridView2.CurrentCell != null)
{
columnIndex = dataGridView2.CurrentCell.ColumnIndex;
rowIndex = dataGridView2.CurrentCell.RowIndex;
}
if (columnIndex == 0)
{
if (e.RowIndex >= 0)
{
if (dataGridView2.Rows[e.RowIndex].Cells["RecordTypeCode"].Value.ToString() == "Batch Header")
{
e.PaintBackground(e.ClipBounds, true);
e.Handled = true;
}
}
}
但是当我只检查BatchHeader
时,我的相应行显示为空答案 0 :(得分:2)
您需要使用cellpainting事件才能完全显示复选框。我不确定在数据绑定期间是否会有其他后果,但它没有显示我想要的行的复选框。
我已根据您的需要更新了该方法。
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex >= 0 && e.ColumnIndex >= 0)
{
//if (e.ColumnIndex == <index of your checkbox column> && (e.RowIndex == 1 || e.RowIndex == 2))
if (dataGridView2.Rows[e.RowIndex].Cells["RecordTypeCode"].Value.ToString() == "Batch Header" && e.ColumnIndex == <index of your checkbox column should be 0 sicne its the first column>)
{
e.PaintBackground(e.ClipBounds, true);
e.Handled = true;
}
}
}
e.RowIndex == 1 || e.RowIndex == 2
的条件是基于batchheader和entrydetail不会改变其位置的事实。但如果这是动态的,那么您只需检查recordtype列中的文本以匹配BatchHeader和EntryDetail。
if语句是最重要的,它会检查哪个特定单元格(行,列)是您不想要的任何复选框。它们必须与AND(&amp;&amp;)一起使用,因为您需要一个特定单元格。如果您所解释的是您所需要的,您可以使用我编写的代码。您可能需要在if语句中再添加一个条目以获取条目详细信息,这需要使用OR(||)和批次标题检查完成。具体如何我在代码的注释部分,特别注意括号。
我在this link处看到了解决方案,当我尝试它时,该解决方案有效。还有其他人提到,这不适合你想要的。