datatable中bool 类型的列 怎么能实现单选

owl1986 2011-01-21 08:49:13
dt1.Columns.Add(new DataColumn("name", typeof(string)));
dt1.Columns.Add(new DataColumn("读写", typeof(bool)));
dt1.Columns.Add(new DataColumn("只读", typeof(bool)));
dt1.Columns.Add(new DataColumn("隐藏", typeof(bool)));
dt1.Columns.Add(new DataColumn("con", typeof(string)));

我现在想让在datagridview显示出来的dt1只能勾选一列,请问如何实现呢
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 owl1986 的回复:]
引用 1 楼 huwei2003 的回复:

checkbox也可以,在每次选择的时候取消之前所选的

我是在数据库中选出来时就已经带出来值了啊
[/Quote]

绑定前重置一下数据源
sxiaohui8709253 2011-01-21
  • 打赏
  • 举报
回复
那你要判断了
用那个CellMouseClick事件就可以
private void dataGridView1_CellMouseClick(....)
{
if(dataGridView1.SelectedRows[0].ColIndex=1)//如果鼠标放在“读写”这一列
{
if(dataGridView1.SelectedRows[0].Cells[1].value.ToString().Equals("False"))
{
dataGridView1.SelectedRows[0].Cells[1].Value=true;
}
else
{
if(dataGridView1.SelectedRows[0].cells[2].Value.ToString.Equals("true")||dataGridView1.SelectedRows[0].cells[3].Value.ToString.Equals("true"))
{
dataGridView1.SelectedRows[0].Cells[1].Value=false;
}
}
}

if(dataGridView1.SelectedRows[0].ColIndex=2)//如果鼠标放在“只读”这一列
{
if(dataGridView1.SelectedRows[0].Cells[2].value.ToString().Equals("False"))
{
dataGridView1.SelectedRows[0].Cells[2].Value=true;
}
else
{
if(dataGridView1.SelectedRows[0].cells[1].Value.ToString.Equals("true")||dataGridView1.SelectedRows[0].cells[3].Value.ToString.Equals("true"))
{
dataGridView1.SelectedRows[0].Cells[2].Value=false;
}
}
}

if(dataGridView1.SelectedRows[0].ColIndex=3)//如果鼠标放在“隐藏”这一列
{
if(dataGridView1.SelectedRows[0].Cells[3].value.ToString().Equals("False"))
{
dataGridView1.SelectedRows[0].Cells[3].Value=true;
}
else
{
if(dataGridView1.SelectedRows[0].cells[1].Value.ToString.Equals("true")||dataGridView1.SelectedRows[0].cells[2].Value.ToString.Equals("true"))
{
dataGridView1.SelectedRows[0].Cells[3].Value=false;
}
}
}

}

就是这么个逻辑
owl1986 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 huwei2003 的回复:]

checkbox也可以,在每次选择的时候取消之前所选的
[/Quote]
我是在数据库中选出来时就已经带出来值了啊
Jack2013tong 2011-01-21
  • 打赏
  • 举报
回复
checkbox也可以,在每次选择的时候取消之前所选的
wuyq11 2011-01-21
  • 打赏
  • 举报
回复
private void DataGridView1_CellValueChanged(System.Object sender, System.Windows.Forms.DataGridViewCellEventArgs e)
{
DataGridViewCell cellChange = this.DataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];
if (cellChange.GetType() == typeof (DataGridViewCheckBoxCell))
{
bool bChecked = Convert.ToBoolean(cellChange.Value.ToString());
if (bChecked)
{
foreach (DataGridViewCell cell in this.DataGridView1.Rows[e.RowIndex].Cells)
{
if (cell.GetType() == typeof(DataGridViewCheckBoxCell) && cell != cellChange)
cell.Value = false;
}
}
}
else if (cellChange.GetType() == typeof (DataGridViewTextBoxCell))
{

}
}


龍过鸡年 2011-01-21
  • 打赏
  • 举报
回复
改下

default: col = ""; break;
龍过鸡年 2011-01-21
  • 打赏
  • 举报
回复

// 加入 Form_Load 事件中

bool hide, read, write;
hide = false; read = false; write = false;

// 要改为程序程序中对应列名
string h, r, w, col;
h = "hide"; r = "read"; w = "write"; col = "";

this.dataGridView1.RowEnter += (obj, args) =>
{
DataGridView dgv = obj as DataGridView;

// 获取原值
try
{
hide = (bool)(dgv[h, args.RowIndex].Value);
read = (bool)(dgv[r, args.RowIndex].Value);
write = (bool)(dgv[w, args.RowIndex].Value);
}
catch
{
hide = false; read = false; write = false;
}
};

this.dataGridView1.CancelRowEdit += (obj, args) =>
{
DataGridView dgv = obj as DataGridView;
if (dgv.CurrentRow != null)
{
int index = dgv.CurrentRow.Index;
if (!dgv[h, index].Value.Equals(hide)) dgv[h, index].Value = hide;
if (!dgv[r, index].Value.Equals(hide)) dgv[r, index].Value = read;
if (!dgv[w, index].Value.Equals(hide)) dgv[w, index].Value = write;
}
};

this.dataGridView1.CellContentClick += (obj, args) =>
{
DataGridView dgv = obj as DataGridView;

switch (dgv.Columns[args.ColumnIndex].Name)
{
case "hide": col = "hide"; break;
case "read": col = "read"; break;
case "write": col = "write"; break;
default: break;
}

if (col == "") return;

DataGridViewCheckBoxCell cell =
dgv[col, args.RowIndex] as DataGridViewCheckBoxCell;

if (cell.EditingCellValueChanged && cell.EditedFormattedValue.Equals(true))
{
if (col != h) dgv[h, args.RowIndex].Value = false;
if (col != r) dgv[r, args.RowIndex].Value = false;
if (col != w) dgv[w, args.RowIndex].Value = false;
}
};

注意 DataGridViewCell.Value 和 DataGridViewCell.EditedFormattedValue 的区别

111,117

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧