在用DataGridView显示数据库的数据,然后赋值给textBox时,测试了三种方法
测试了CurrentRow, SelectedCells和Rows三种方法:
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.Text的Count值等于txtACC.Text的Count值,显然是个错误.
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最完美.