我想获取复选框所在行的值。我是C#windows表单的新手,到目前为止还不成功。我想最终使用这些行值,所以如果用户选择多行,那么我应该为那些检查获得值。另外,我已将选择模式设置为'fullrowselect'
请修改我的代码
private void button1_Click(object sender, EventArgs e)
{
StringBuilder ln = new StringBuilder();
dataGridView1.ClearSelection();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (dataGridView1.SelectedRows.Count>0 )
{
ln.Append(row.Cells[1].Value.ToString());
}
else
{
MessageBox.Show("No row is selected!");
break;
}
}
MessageBox.Show("Row Content -" + ln);
}
答案 0 :(得分:0)
SelectedRows是所选行(或高位行)的行数,而不是已检查的行数。 您的代码中的第二个问题是您正在执行foreach行,但在您内部使用dataGridView,而不是当前行。 这就是你的必须如何:
private void button1_Click(object sender, EventArgs e)
{
const int checkBoxPosition = 3; //You must type here the position of checkbox.
// Remember, it's zero based.
StringBuilder ln = new StringBuilder();
dataGridView1.ClearSelection();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[checkBoxPosition].Value == true)
{
ln.Append(row.Cells[1].Value.ToString());
}
else
{
MessageBox.Show("No row is selected!");
break;
}
}
MessageBox.Show("Row Content -" + ln);
}
答案 1 :(得分:0)
网格中有一个复选框列不会更改任何行的内部状态,因此您需要自己迭代它们以进行评估。虽然你需要为checkBoxColumnIndex中的复选框列提供正确的列索引
,但这应该可以解决问题。int checkBoxColumnIndex = nnn; // 0 based index of checkboxcolumn
private void button1_Click(object sender, EventArgs e)
{
List<string> checkedItems = new List<string>();
dataGridView1.ClearSelection();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
DataGridViewCheckBoxCell checkBox= row.Cells[checkBoxColumnIndex] as DataGridViewCheckBoxCell;
if (Convert.ToBoolean(checkBox.Value) == true)
{
checkedItems.Add(row.Cells[1].Value.ToString());
}
}
if (checkItems.Count > 0)
MessageBox.Show("Row Content -\r\n" + String.Join("\r\n", checkedItems));
else
MessageBox.Show("No row is selected!");
}
不可否认,List<string>
是一个繁重的构造,如果您只想打印列表,但如果您需要对所有选中的值进行进一步处理,那么它将非常有用。
答案 2 :(得分:0)
以下是您可能想要的代码版本。但是很难分辨,因为您正在讨论选定的行,但在处理行之前正在清除选择!
这没有任何意义..也许你的意思是选中的行?好的,你这样做,所以你走了:
private void button1_Click(object sender, EventArgs e)
{
StringBuilder ln = new StringBuilder();
dataGridView1.ClearSelection();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (((bool?)row.Cells[0].Value) == true)
{
ln.Append(row.Cells[1].FormattedValue);
}
}
if (ln.Length <= 0) MessageBox.Show("No rows are checked!");
else MessageBox.Show("Rows content: " + ln);
}