[英]Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
[英]Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
剛剛在 C# 中從 Visual Studio 更新 MySql DataGridView 時遇到了一個小問題。 下面的代碼包含 fillData(); 填充數據網格的方法。 按鈕代碼中拋出異常錯誤。 該按鈕的目的是將 Reviewed 字段從 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());
}
}
}
您的問題在於這一行:
string DataId = dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index].Cells["DataID"].Value.ToString();
您正在嘗試在沒有記錄的地方插入記錄。 解決此問題的解決方法是先嘗試在行中插入一些虛擬數據,然后用實際數據覆蓋它。
我猜你的問題在這里:
.SelectedRows[0]
您能否驗證運行此代碼時.SelectedRows
屬性的Count
是否為 1 或更多?
作為旁注,以下表達式:
dataGridView2.Rows[this.dataGridView2.SelectedRows[0].Index]
...似乎不必要地復雜。 可以用這個代替嗎?
this.dataGridView2.SelectedRows[0]
通過檢查以下事項,您可以找到問題:
this.dataGridView2.SelectedRows
中有多少條目?this.dataGridView2.Rows
中有多少條目?this.dataGridView2.SelectedRows[0].Index
的值是多少?索引值大於這些集合之一中的有效條目數。
我在處理 gridview 中的按鈕事件時遇到了這種問題。我對此的解決方案是:
if (e.ColumnIndex == 0 && e.RowIndex >=0) { //condition here }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.