我正在使用数据网格视图来接受来自用户的数据。我在数据网格视图中添加了3列:
我正在处理单元格离开事件,并且我已根据在组合框单元格中选择的名称选择了所需的数据。
我使用以下代码:
private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex== 1)
{
string name= dataGridView1.CurrentCell.EditedFormattedValue.ToString();
SqlConnection c = new SqlConnection();
c.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename='D:\\Documents\\
Visual Studio 2008\\Projects\\
test\\test\\Database1.mdf';Integrated Security=True;User Instance=True";
c.Open();
string q = "select code from test where name ='"+name+"'";
SqlCommand cmd = new SqlCommand(q, c);
SqlDataReader dr = cmd.ExecuteReader();
DataGridViewTextBoxColumn cod = dataGridView1.Columns[2] as DataGridViewTextBoxColumn;
while (dr.Read())
{
int code = dr.GetInt32(0);
MessageBox.Show(code.ToString());
}
}
}
因此上面的代码运行正常,在最后一个消息框中显示了在组合框中选择的名称的相应代码。
我希望只要组合框单元格松散焦点,下一个单元格就会自动获取所需的代码。
答案 0 :(得分:1)
你可以用
替换你的MessageBox.ShowdataGridView1.Rows[e.RowIndex].Cells[2].Value = code;
您也可以通过调用cmd.ExecuteScalar替换您的SqlDataReader ...并使用SqlParameter而不是动态构造where条件...如果您想改进代码......
使用ExecuteScalar的示例:
using (var c = new SqlConnection())
{
using (var cmd = new SqlCommand("select code from test where name = @name", c))
{
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = name;
c.Open();
int code = (int)cmd.ExecuteScalar();
}
}
我建议添加一些异常处理代码......