c# dataGridView 的复选框(CheckBox)多选择的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# dataGridView 的复选框(CheckBox)多选择的问题相关的知识,希望对你有一定的参考价值。

我在(c#winform)里放了个dataGridView在Columns里添加了DataGridViewCheckBoxColumn

我用SQL 查询"员工表"把"员工表"的"员工号"和"姓名"放到dataGridView里,加上复选框一共有三列!

我想把复选框选中的员工号和姓名都放到另一个表里(部门表)里,怎么做??

var table = new System.Data.DataTable();
table.Columns.AddRange(new System.Data.DataColumn[]
new System.Data.DataColumn() ColumnName = "ID", DataType = typeof(int) ,
new System.Data.DataColumn() ColumnName = "Name", DataType = typeof(string)
);

table.Rows.Add(new object[] 1, "A" );
table.Rows.Add(new object[] 2, "B" );
table.Rows.Add(new object[] 3, "C" );
table.Rows.Add(new object[] 4, "D" );

dgv.AllowUserToAddRows = false;
dgv.AutoGenerateColumns = false;

dgv.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[]
new System.Windows.Forms.DataGridViewCheckBoxColumn(),
new System.Windows.Forms.DataGridViewTextBoxColumn()

HeaderText="ID",
DataPropertyName="ID",
ReadOnly = true
,
new System.Windows.Forms.DataGridViewTextBoxColumn()

HeaderText="Name",
DataPropertyName="Name",
ReadOnly = true

);
dgv.DataSource = table;
// ---------------------------------------------------------
// 以上是为了测试,自定义的控件和数据
// ---------------------------------------------------------
btn.Click += (obj, args) =>

// 主要是这里
var items = dgv.Rows.Cast<System.Windows.Forms.DataGridViewRow>()
.Where(item => true.Equals(item.Cells[0].Value))
.Select(item => new

ID = (item.Cells[1].Value ?? 0),
Name = (item.Cells[2].Value ?? "") as string
);

var lines = items
.Select(item => string.Format("0 - 1", item.ID, item.Name));

// 在输出中显示了被勾选的 工号和姓名
Console.WriteLine(string.Join("\r\n", lines));
;追问

我要的是输入到第二个表里

追答

var lines = items
.Select(item => string.Format("0 - 1", item.ID, item.Name));
这句代码包含了要输出到第二个表里面的数据
如果你能提供下第二个表的表名和字段名,我可以帮你写个简单的查询

参考技术A 进行个循环,当第一列被勾选上时把这一行放到一个DATATABLE中去,然后在你需要的部门表里COPY下就可以得到了。大致是这样:
dataRow dr ;
for (int i = 0;i <dgvRev.Rows.Count ; i++)

if (dtRev.Rows[i]["第一列的名称"].ToString() == "Y")

dr["员工号"] = dataGridView.Row[i].cells["员工号"].ToString();
dr"姓名"] = dataGridView.Row[i].cells"姓名"].ToString();


datatable dt = new datatable();
dt.rows.add(dr);
下面就是你自己要放到哪个表里去了,只要把这里的dt设置为你那个表的数据源就可以了。

C#的datagrid中添加复选框的问题

我有一个表table1;然后比如说有4个字段,name,apple,orange,banana;
然后我想用datagrid显示出来。
就是name字段显示为文本,然后apple,orange,banana显示为复选框。
如果数据库是0,则复选框不选中,如果是1,则选中。
大意就是这样。
我的设想是要这样的:
请问,我要怎么写。
就是写一个方法,比如congvert(dataset ds)
然后让这个方法返回格式经过整理的dataset ds。
然后再把这个ds和datagrid进行绑定。
请问我要在congvert(dataset ds)这个方法里怎么写。
谢谢!
apple,orange,banana是int类型。
这是一个作业,就是要用datagrid读出数据库的数据,然后表示成我描述的那样。
感觉方法很多,但是我只想知道怎么用我的方法写。
怎么在aspx页面定义一个datagrid然后在aspx.cs文件中进行处理,使之显示成我描述的那样。
拜托了。。

private void Form1_Load(object sender, EventArgs e)

DataGridViewTextBoxColumn name1 = new DataGridViewTextBoxColumn();
name1.Name = "name"; name1.HeaderText = "name";
dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn []name1);
//加第一个字段
DataGridViewCheckBoxColumn apple=new DataGridViewCheckBoxColumn ();
apple.Name = "apple"; apple.HeaderText = "apple";
dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[]
apple);//加第二个。
DataGridViewCheckBoxColumn orange = new DataGridViewCheckBoxColumn();
orange.Name = "orange"; orange.HeaderText = "orange";
dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[]
orange);//加第三个。
DataGridViewCheckBoxColumn banana = new DataGridViewCheckBoxColumn();
banana.Name = "banana"; banana.HeaderText = "banana";
dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[]
banana);//加第四个。

string con = "server=192.160.1.88;database=MYLX;uid=ss;pwd=123";
SqlConnection conn = new SqlConnection(con);//数据库连接

string sql = "select name,apple,orange,banana from table1";
SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
DataSet ds = new DataSet();//数据读取
sda.Fill(ds);//填充

ds = convert(ds);//调用方法

dataGridView1.Columns[0].DataPropertyName = "name";//数据绑定
dataGridView1.Columns[1].DataPropertyName = "apple";//数据绑定
dataGridView1.Columns[2].DataPropertyName = "orange";//数据绑定
dataGridView1.Columns[3].DataPropertyName = "banana";//数据绑定
dataGridView1.DataSource = ds.Tables[0].DefaultView;//数据绑定



DataSet convert(DataSet ds)

int col = ds.Tables[0].Columns.Count;//获取行
int row = ds.Tables[0].Rows.Count;//获取列
//dataGridView1 中的checkbox只接受bool类型的值的所以这里面要转换一下!
for (int j = 0; j < row; j++)

for (int i = 1; i < col; i++)

//把为1的写写true
if (ds.Tables[0].Rows[j][i].ToString ().Trim () == "1")

ds.Tables[0].Rows[j][i] = "true";

//把不为1的写成false
else

ds.Tables[0].Rows[j][i]="false";



return ds;
参考技术A 如果 apple,orange,banana在数据库中是bit类型那么到界面上自动会转成复选框并且自动会显示选中与否,不需要写你那个convert的方法
如果是其他类型那么就要看情况来定了

public DataTable convert(DataSet ds)

DataTable targetData = new DataTable();
//构造一个和你数据库一样的DataTable把你 apple等列改成布尔类型
targetData.Columns.Add(...)
...
targetData.Columns.Add("apple");
targetData.Columns["apple"].DataType = TypeCode.Boolean;

foreach(DataRow sourceRow in ds.Tables[0].Rows)

DataRow targetNewRow = targetData.NewRow();
.... //将原数据添加到目标DataTable中
....
boolean apple = sourceRow["apple"].ToString()=="1"?true:false;
targetData["apple"] = apple;
....
....
targetData.Rows.Add(targetNewRow);

return targetData;
参考技术B 判断一下呗,
foreach(Row row int ds.tables[0].Rows)

if(int.parse(row["apple"])==1)

foreach (GridViewRow item in gridview.Rows)

(CheckBox)item.FindControl("checkbox1").checked=true;



参考技术C 可以使用datagrid的编辑功能,里面可以选用datagrid的combox、textbox功能

以上是关于c# dataGridView 的复选框(CheckBox)多选择的问题的主要内容,如果未能解决你的问题,请参考以下文章

c# dataGridView 的复选框(CheckBox)多选择的问题

C#里面的datagridview

c# winform中dataGridView的复选框只能选一个,代码怎么写?

C#的datagrid中添加复选框的问题

c# datagridview主要方法

c#怎么把datagridview给填满