C# 从textbox的选定文本将数据提取到datagridview中

C# 从textbox的选定文本将数据提取到datagridview中,c#,C#,在文本框中,我获取城市名称,当我选择任何城市名称时,与该城市相关的信息应显示在datagridview上,为了获取关于状态的其他信息,我使用了一个外键,因为状态表不同,它的信息存储在另一个表中,所以我从外键state_id获取该信息 DataTable dt = new DataTable(); SqlDataAdapter tda = new SqlDataAdapter("SELECT a1.type,a1.state_id,a1.desc1,a1.from_date,a1.to_date,

在文本框中,我获取城市名称,当我选择任何城市名称时,与该城市相关的信息应显示在datagridview上,为了获取关于状态的其他信息,我使用了一个外键,因为状态表不同,它的信息存储在另一个表中,所以我从外键state_id获取该信息

DataTable dt = new DataTable();
SqlDataAdapter tda = new SqlDataAdapter("SELECT a1.type,a1.state_id,a1.desc1,a1.from_date,a1.to_date,a1.expr1005 FROM item_rate a1 FULL OUTER JOIN item_rate_state a2 ON a1.state_id=a2.state_id WHERE state_name='" + textBox2.Text + "'", scon);
            tda.Fill(dt);
            dataGridView2.DataSource = dt;

这个问题似乎有点错误

应该是

SqlDataAdapter tda = new SqlDataAdapter("SELECT a1.type,a1.state_id,a1.desc1,a1.from_date,a1.to_date,a1.expr1005 FROM item_rate a1 FULL OUTER JOIN item_rate_state a2 ON a1.state_id=a2.state_id WHERE a2.state_name='" + textBox2.Text + "'", scon);
我建议您使用SqlCommand并添加参数以正确的方式进行查询,因为您的代码容易受到sql注入的攻击

根据评论回答

由于您现在确实希望在textbox为空时显示任何记录,所以请在TextChanged事件上执行此操作

if (!String.IsNotNullOrEmpty(textBox2.Text))
{

    DataTable dt = new DataTable();
    SqlDataAdapter tda = new SqlDataAdapter("SELECT a1.type,a1.state_id,a1.desc1,a1.from_date,a1.to_date,a1.expr1005 FROM item_rate a1 FULL OUTER JOIN item_rate_state a2 ON a1.state_id=a2.state_id WHERE a2.state_name='" + textBox2.Text + "'", scon);
    tda.Fill(dt);
    dataGridView2.DataSource = dt;

}
你已经试过了

在设计页面中设置textBox2.AutoPostBack=True

 protected void textBox2_TextChanged(object sender, EventArgs e)
    {
DataTable dt = new DataTable();
SqlDataAdapter tda = new SqlDataAdapter("SELECT a1.type,a1.state_id,a1.desc1,a1.from_date,a1.to_date,a1.expr1005 FROM item_rate a1 FULL OUTER JOIN item_rate_state a2 ON a1.state_id=a2.state_id WHERE state_name='" + textBox2.Text + "'", scon);
            tda.Fill(dt);
            dataGridView2.DataSource = dt;
    }

你的问题是什么?在你发布的内容中似乎没有一个明确的问题。我有表名item\u rate\u state,其中我只有两列,即state\u id,state\u name与项目相关。现在我有另一个表项\u rate,其中有多个列存储项目信息,现在当我在文本框中搜索state时,如果我选择了任何结果状态,那么与该状态相关的项目信息应该在datagridview中获取,而不是所有信息,只有我在上面的查询中尝试选择的列应该在datagridview中获取。实际上,我想要的结果是在datagridview中获取,问题是,当我在textbox\u keypress事件或任何其他事件上编写上述代码时,当我选择已进入textbox的状态并在该状态下按两次backspace按钮时,我不希望它被获取。TextChanged会因每次文本更改而被激发,猜测不是OP希望的内容。然后在按钮单击事件中尝试此操作否我无法自我必须遵守一些协议。好吧,我认为这是正确的方式。然后设置条件,如字符串长度大于某个数字,则会触发数据绑定。。