在数据网格视图中,我需要循环遍历行并获取包含已选中复选框的行 dgv.rows [i] .cells [0] .value 在这两种情况下都返回空 所有这一切都发生在事件 CellContentClick
上答案 0 :(得分:0)
尝试:
'VB
Dim MyCheckBox As CheckBox = _
CType(dgv.rows[i].cells[0].findcontrol("checkbox_id"), CheckBox)
C#:
//C#
CheckBox MyCheckBox =
dgv.Rows[i].Cells[0].FindControl("checkbox_id") as CheckBox;
当单元格不包含任何其他控件时,单元格上的Value属性引用文本内容。
答案 1 :(得分:0)
如果复选框不包含任何数据,则结果将为空值。您可以使用bool.Parse()
解析循环中的值,假设该值不为空,即
for ( int i = 0; i < dgv.Rows.Count; i++ )
{
var val = dgv.Rows[i].Cells[0].Value;
if ( val == null ) { continue; }
bool isChecked = bool.Parse( val.ToString() );
}
答案 2 :(得分:0)
static class DataGridViewExtensions
{
public static IEnumerable<DataGridViewRow> CheckedRows(this DataGridView dgv, string checkedColumnName)
{
return CheckedRows(dgv, dgv.Columns[checkedColumnName].Index);
}
public static IEnumerable<DataGridViewRow> CheckedRows(this DataGridView dgv, int checkedColumnIndex)
{
foreach (DataGridViewRow row in dgv.Rows)
{
DataGridViewCheckBoxCell cell = row.Cells[checkedColumnIndex] as DataGridViewCheckBoxCell;
Debug.Assert(cell != null, "The column specified is not a check box column");
if (cell != null && (bool)cell.Value)
yield return row;
}
}
}