如何在数据网格视图中设置上一个单元格离开事件的文本框单元格的值

时间:2013-12-18 10:28:52

标签: c# datagridview

我正在使用数据网格视图来接受来自用户的数据。我在数据网格视图中添加了3列:

  1. S.no。 (序列号:自动生成的字段:文本框列)
  2. acname(帐户名称:从加载事件中的表中选择名称:组合框列)
  3. 代码(代码:应该选择在COMBO BOX CELL中选择的名称的代码:文本框列)
  4. 我正在处理单元格离开事件,并且我已根据在组合框单元格中选择的名称选择了所需的数据。

    我使用以下代码:

     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());
            }
        }
     }
    

    因此上面的代码运行正常,在最后一个消息框中显示了在组合框中选择的名称的相应代码。

    我希望只要组合框单元格松散焦点,下一个单元格就会自动获取所需的代码。

1 个答案:

答案 0 :(得分:1)

你可以用

替换你的MessageBox.Show
dataGridView1.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();
    }
}

我建议添加一些异常处理代码......