这里有一个小问题,在C#中从visual studio更新MySql DataGridView。下面的代码包含fillData();填充数据网格的方法。按钮代码中抛出异常错误。该按钮的目的是将已审核的字段从0替换为1,这意味着随后将选中已复选的复选框。这可能是一个非常基本的问题所以我可能会提出更多问题,希望你能提供帮助。
public DataTable tb = new DataTable();
public MySqlDataAdapter a = new MySqlDataAdapter();
public void fillData()
{
using (MySqlConnection c = new MySqlConnection("host="";user="";password=""; database="";"))
{
c.Open();
string strSQL = "SELECT DataID, Date, WhichMeal, HbA1C_Test, Carbohydrates, GlucoseReading, InsulinUsed, InsulinType, ReviewedBy, Reviewed From PatientData WHERE username = '" + uname.Text + "';";
using (MySqlDataAdapter a = new MySqlDataAdapter(strSQL, c))
{
a.Fill(tb);
dataGridView2.DataSource = tb;
}
private void button5_Click(object sender, EventArgs e)
{
using (MySqlConnection c = new MySqlConnection("host=;user=;password= ""; database=""))
{
try
{
string DataId = dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index].Cells["DataID"].Value.ToString();
string Update = string.Format("UPDATE PatientData SET Reviewed = 1 WHERE DataID = {0}", DataId);
MySqlCommand command = new MySqlCommand(Update, c);
c.Open();
command.ExecuteNonQuery();
c.Close();
tb.Clear();
fillData();
}
catch (MySqlException ex)
{
MessageBox.Show(ex.ToString());
}
}
}
答案 0 :(得分:2)
我猜你的问题就在这里:
.SelectedRows[0]
您可以在运行此代码时验证.SelectedRows
属性的Count
是否为1或更多?
作为旁注,以下表达式:
dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index]
......似乎不必要地复杂。你可以用它替换它吗?
this.dataGridView2.SelectedRows[0]
答案 1 :(得分:2)
您可以通过检查以下内容找到问题:
this.dataGridView2.SelectedRows
?this.dataGridView2.Rows
中有多少条目?this.dataGridView2.SelectedRows[0].Index
的价值是什么?索引值大于其中一个集合中的有效条目数。
答案 2 :(得分:2)
你的问题在于这一行:
string DataId = dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index].Cells["DataID"].Value.ToString();
您正尝试在没有记录的地方插入记录。解决此问题的解决方法是尝试先在行中插入一些虚拟数据,然后用实际数据覆盖它。
答案 3 :(得分:0)
我在处理gridview中的按钮事件时遇到了这种问题..我的解决方法就是这样:
if (e.ColumnIndex == 0 && e.RowIndex >=0) { //condition here }