单击dataGridView某一行时将dataGridView当前选择行的值赋值给textBox某个文本框

 

在用DataGridView显示数据库的数据,然后赋值给textBox时,测试了三种方法

测试了CurrentRow, SelectedCellsRows三种方法:
1. CurrentRow:单击DataGridView任一位置都可以赋值到textBox,这种方法最好用.

private void dgvACC_CellClick(object sender, DataGridViewCellEventArgs e)       
{
            string data1 = dgvACC.CurrentRow.Cells[0].Value.ToString();
            string data2 = dgvACC.CurrentRow.Cells[1].Value.ToString();
            txtACC.Text = data1;
            txtPWD.Text = data2;
}

2. SelectedCells: SelectedRows时必须 单击该行最前面的的方格而不能点击表格里有数据的单元格,如果点击表内则会报错: 索引超出范围。必须为非负值并小于集合大小。参数名: index.

用断点调试查看了一下, txtPWD.TextCount值等于txtACC.TextCount,显然是个错误.

private void dgvACC_CellClick(object sender, DataGridViewCellEventArgs e)    
{
            string data2 = dgvACC.SelectedCells[0].Value.ToString();
            string data3 = dgvACC.SelectedCells[2].Value.ToString();
            txtACC.Text = data1;
            txtPWD.Text = data2;
}

 

 

3. 而第三种方式是教材上提供的案例Rows, 这个方法缺点就是DataGridView第一行无法选中,其他都正常

private void dgvACC_CellClick(object sender, DataGridViewCellEventArgs e)   
        {
            if (e.RowIndex>0)
            {
                String strACC  = (String)dgvACC.Rows[e.RowIndex].Cells[0].Value;
                sqlcon = new SqlConnection(Myclass.Myclass1.sqlCon);
                SqlDataAdapter sqlda = new SqlDataAdapter("select AccountID,Password from tb_Power where AccountID=”strACC”", sqlcon);
               DataSet myds = new DataSet();
               sqlda.Fill(myds);
               if (myds.Tables[0].Rows.Count >0)
               {
                   txtACC.Text = myds.Tables[0].Rows[0][1].ToString();
                   txtPWD.Text = myds.Tables[0].Rows[0][2].ToString();
                }
            }
        }

对比以上三种方法,新手小白使用CurrentRow最完美.

猜你喜欢

转载自blog.csdn.net/zhuzinanhua/article/details/82819777