我在form5的textbox中输入一个值,判断和form4中的datagridview的第一列值是否相等,不相等就显示未找到,怎么写这句啊?在线等答案~~
if (textBox1.Text == "")
{
MessageBox.Show("请输入号");
}
else if(textBox1.Text != "")
{
if (textBox1.Text != form4.dataGridView1.Columns[1].ToString())
{
MessageBox.Show("未找到对应的信息");
}
}
显示的错误是:索引超出范围。必须为非负值并小雨集合大小。参数名:index
大家插入代码的时候用代码插入插件或者格式化一下不好么?
你得确定你的dagaGridView1有几列。form4.dataGridView1.Columns[1].ToString()这里要找的是第2列(Columns是以0为索引第1项的),如果你要找第1列的值,应该是Columns[0]。如果你的dagaGridView1只有1列,那form4.dataGridView1.Columns[1].ToString()肯定要抛出“索引超出范围”的异常。
另外,Columns[0]得到的是一个DataGridViewColumn的实例,直接ToString仍然没法得到你想要的。
建议这样:
if (textBox1.Text == "")
{
MessageBox.Show("请输入号");
}
else if(textBox1.Text != "")
{
bool hasSame = false;
for(int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (textBox1.Text == dataGridView1.Rows[i].Cells[0].Value)
hasSame = true;
}
if (!hasSame)
MessageBox.Show("未找到对应的信息");
}
那如果相等就显示出数据,显示的语句该放在哪?
@巴索罗缪库玛:
if (!hasSame)
MessageBox.Show("未找到对应的信息");
else
// 显示的语句
@麒麟.NET: 我试过了,不行,而且大括号你都没加~~
@巴索罗缪库玛: ……大括号没加是因为只有一行语句,你要是有多行可以自己加上啊。怎么不行?报什么错误?
@麒麟.NET: 不是错误,是先显示出“未找到对应的信息”,然后再显示出表……
@巴索罗缪库玛: 贴一下你现在的代码把
@麒麟.NET:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("请输入号");
}
else if (textBox1.Text != "")
{
bool hasSame = false;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (textBox1.Text == dataGridView1.Rows[i].Cells[0].Value)
{
hasSame = true;
}
}
if (!hasSame)
{
MessageBox.Show("未找到对应的信息");
}
}
else
{
SqlConnection connection = new SqlConnection("server=.;integrated security=SSPI;database=test");
connection.Open();
string sql1 = "select * from a where number='" + this.textBox1.Text + "'";
SqlCommand cmd1 = new SqlCommand(sql1);
cmd1.Connection = connection;
SqlDataReader dr1 = cmd1.ExecuteReader();
BindingSource bs = new BindingSource();
bs.DataSource = dr1;
this.dataGridView1.DataSource = bs;
connection.Close();
}
}
帮忙看看~~
@巴索罗缪库玛: 显然不对啊,你看我前面的代码,最后的一个else应该放在判断是否有对应数据的后面啊,改成这样:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("请输入号");
}
else if (textBox1.Text != "")
{
bool hasSame = false;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (textBox1.Text == dataGridView1.Rows[i].Cells[0].Value)
{
hasSame = true;
}
}
if (!hasSame)
{
MessageBox.Show("未找到对应的信息");
}
else
{
SqlConnection connection = new SqlConnection("server=.;integrated security=SSPI;database=test");
connection.Open();
string sql1 = "select * from a where number='" + this.textBox1.Text + "'";
SqlCommand cmd1 = new SqlCommand(sql1);
cmd1.Connection = connection;
SqlDataReader dr1 = cmd1.ExecuteReader();
BindingSource bs = new BindingSource();
bs.DataSource = dr1;
this.dataGridView1.DataSource = bs;
connection.Close();
}
}
}
@麒麟.NET: 如果加了else,只显示未找到对应的信息,显示不出表;如果不加else,还能显示出表,只是之前还是显示未能找到对应的信息提示框……
@巴索罗缪库玛: 说得我晕头转向,如果找不到对应的信息,当然不显示表了。你想要什么样的结果?
@麒麟.NET: 我的意思是,表显示的正常,而对话框是多余的~在显示了找不到信息的对话框后还是显示出了正确的表
@巴索罗缪库玛: 你可以看看代码的逻辑,再思考一下应该怎么改。提示一下:
遍历datagridview的第一列,用form5的textbox中的值与它一一进行比较。
dagaGridView1.Columns[1].Value //第一列的值
for(int i=0;i<dagaGridView1.rows.count;i++){
if(dagaGridView1.Columns[1]!=null){
if(dagaGridView1.Columns[1].Value.tostring().trim()==textbox.text.trim()){
return true;
}
}
}
return false;