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

dataGridView1[0][0].ToString()

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)

参考技术A 你的Form4在Form5里必须先实例化后,或者是静态变量才能用form5的Textbox1的值与之比较 参考技术B 第一列应该是0,不是1 参考技术C datagridview的第一列值
这个你指的是列名称吗?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事件里面看看效果不就知道了。基本上是全得了。当然,“]["你要取得的字段"].”得改成你的字段名。

参考技术A 在工具箱中点击右键,选择添加,然后把webbrowser控件添加进来,再把webbrowser控件拖到你程序中就有axwebbrowser控件了 参考技术B 这个
不要重新绑定数据源
也无需绑定数据源
根据每行编码 查询当前行数据,进行当前行数据的绑定。
dataGridView1.DataSource = dk.Tables[0];将整个datagridview刷新了,能不跳到第一行吗?
参考技术C 你加的事件不对吧追问

可以给个例子吗?
重要的代码,也可以了

以上是关于c#如何获取datagridview中的第一列的值,注意不是选中行的主要内容,如果未能解决你的问题,请参考以下文章

C# Winform中 选中DatagridView控件中某行如何将该行某个字段(1,2,3,4,)的值绑定CheckedListBox控件的数

数据库 C# datagridview可不可以让某一列禁止被更改

在 DataGridView c# 中添加列和行

更改DataTable某列的值。C#

Datagridview_2 组合框值在 C# 中无效

DataGridView 行列的隐藏和删除