c#如何获取datagridview中的第一列的值,注意不是选中行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#如何获取datagridview中的第一列的值,注意不是选中行相关的知识,希望对你有一定的参考价值。
我在form5的textbox中输入一个值,判断和form4中的datagridview的第一列值是否相等,不相等就显示未找到,我这程序错哪了啊?在线等答案~~
if (textBox1.Text == "")
MessageBox.Show("请输入号");
else if(textBox1.Text != "")
if (textBox1.Text != form4.dataGridView1.Columns[1].ToString())
MessageBox.Show("未找到对应的信息");
显示的错误是:索引超出范围。必须为非负值并小雨集合大小。参数名:index
2点问题
首先第一列的索引不是1,是0
其次第一列直接tostring无意义,一列怎么和值比较?必然要单元格才能和值比较啊追问
什么意思?
追答表示这个DataGridView的第一行第一列这一单元格
追问不只是第一行,而是要与所有行的第一列的值比较
追答那就foreach比较吧,不可能直接把列和一个string比较的
bool result=false;
foreach(var each in form4.dataGridView1.Columns[0])
if (textBox1.Text == each.value.ToString())
result=true;
break;
if(!result) MessageBox.Show("未找到对应的信息");
就是要把textbox的值与每行的第一列值分别做一遍比较,如果都不相等,就显示未找到。那我应该怎么写才对呢?
追答bool result=false;
foreach(var each in form4.dataGridView1.rows)
if (textBox1.Text == each[0].value.ToString())
result=true;
break;
if(!result) MessageBox.Show("未找到对应的信息");
以上,二选一吧,建议这种
if (textBox1.Text == each[0].value.ToString())这句打出来有错误呀,显示无法将带[]的索引应用于"object"类型的表达式
追答bool result = false;
foreach(DataGridViewRow each in form4.dataGridView1.Rows)
if(textBox1.Text == each.Cells[0].Value.ToString())
result = true;
break;
修改完毕。
好吧,发烧的时候,总是不太靠谱。
啊,这个问题是解决了,可是如果我在if(!result) MessageBox.Show("未找到对应的信息");这句后面加上else,也就是判断相等的时候应该显示表,可还是显示未找到对应的信息,怎么回事呀?
追答if(!result)
MessageBox.Show("未找到对应的信息");
return;
//显示表的流程
这样应该不会进才是
加了return后不行,如果不加的话先显示未找到对应的信息,然后显示出表了……难道是语句顺序有问题?
追答显示对话框就说明已经满足了if的条件,也就是没有找到对应信息,你查下看看吧
追问但是我输入的值和表的第一列是一样的,相当于此时的提示框是多余的……
追答肯定字符串比较的时候还是认为不同了。
比较字符串的时候,加trim()去首尾的空格试试
还有大小写?
不然你试下string.Compare(textBox1.Text.Trim(),each.Cells[0].Value.ToString().Trim(),true)
这个你指的是列名称吗?Columns[1].ColumnName
如果是第一行第一列,是类似dataGridView1.rows(0).cells(0).value
c# winform datagridview cellendedit 在datagridview的第一列输入编码,第二,三列自动取值,名称和规格
据库中已经有基础资料
编码 名称 规格
1122 杯子 330
2233 螺丝 317
.... ... ...
... ... ...
制作一张进仓单,在
datagridview的第一列输入编码1122,第二列和第三列会自动取值,
string sql = "select * from base_wl where wlno='" + dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() +"'";
DataSet dk = new DataSet();
SqlDataAdapter db = new SqlDataAdapter(sql, con);
db.Fill(dk);
dataGridView1.DataSource = dk.Tables[0];
这样只能在第一行里输入后datagridview显示,当我在第二行继续输入编码的时候,还是会跳到datagridview第一行显示我第二次输入的编码和第二列和第三列的信息
不知道怎么存储多条的信息在datagridview显示
1、使用CellEndEdit事件。在事件中,e.ColumnIndex 和e.RowIndex 指示了你刚刚编辑的是哪一个单元格;
2、 大体代码如下:
if(e.ColumnIndex != 0)
return;
string sql = "select * from base_wl where wlno='" + dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString() +"'";
DataSet dk = new DataSet();
SqlDataAdapter db = new SqlDataAdapter(sql, con);
db.Fill(dk);
dataGridView1.Rows[e.RowIndex].Cells[e.1] = db.Tables[0].Rows[0]["你要取得的字段"].ToString(); //给第二列赋值
dataGridView1.Rows[e.RowIndex].Cells[e.1] = db.Tables[0].Rows[0]["你要取得的字段"].ToString(); //给第三列赋值追问
if(e.ColumnIndex != 0)
这句是一个循环?
datagridview不断的循环绑定?
datagridview 绑定哪个数据源,给个思路,怎么弄?
我输入第一行记录后,datagridview就显示我刚才输入的那条记录
当我到第二行记录输入的时候,datagridview就只显示我第二次输入的记录
if不是循环,而是在cellendedit事件里面首先判断一下“刚刚完成编辑的如果不是第一列,那么跳出”
你用我给你的代码放到cellendedit事件里面看看效果不就知道了。基本上是全得了。当然,“]["你要取得的字段"].”得改成你的字段名。
不要重新绑定数据源
也无需绑定数据源
根据每行编码 查询当前行数据,进行当前行数据的绑定。
dataGridView1.DataSource = dk.Tables[0];将整个datagridview刷新了,能不跳到第一行吗? 参考技术C 你加的事件不对吧追问
可以给个例子吗?
重要的代码,也可以了
以上是关于c#如何获取datagridview中的第一列的值,注意不是选中行的主要内容,如果未能解决你的问题,请参考以下文章
C# Winform中 选中DatagridView控件中某行如何将该行某个字段(1,2,3,4,)的值绑定CheckedListBox控件的数