簡體   English   中英

InvalidArgument =值'1'對'索引'無效

[英]InvalidArgument=Value of '1' is not valid for 'index'

與MDB訪問數據庫交互的C#應用​​程序中出現錯誤。

錯誤是:

InvalidArgument =值“ 1”對“索引”無效。

我的代碼:

objConn.Open();
listView1.Items.Clear();
OleDbCommand cmd = new OleDbCommand("select a.bill_Id,a.bill_Number,a.bill_Date,c.sup_Name,Sum(b.de_NetPrice),a.bill_Note from (suppliers c right JOIN bills a on c.sup_Id = a.bill_From) LEFT JOIN  bill_Details b on a.bill_Id = b.bill_Id where a.bill_Id like '%" + txbSearch.Text + "%' or a.bill_Number like '%" + txbSearch.Text + "%' or c.sup_Name like '%" + txbSearch.Text + "%' or a.bill_Note like '%" + txbSearch.Text + "%'  group by a.bill_Id,a.bill_Number,a.bill_Date,c.sup_Name,a.bill_Note order by a.bill_Date desc", objConn);
OleDbDataReader dataReader = cmd.ExecuteReader();

int i = 0;
while (dataReader.Read())
{
    DateTime dt0 = DateTime.Parse(dataReader.GetValue(2).ToString());
    int Date1 = DateTime.Compare(DateTime.Parse(dt0.ToShortDateString()), DateTime.Parse(txbFrom.Value.ToShortDateString()));
    int Date2 = DateTime.Compare(DateTime.Parse(dt0.ToShortDateString()), DateTime.Parse(txbTo.Value.ToShortDateString()));
    if (Date1 >= 0 && Date2 <= 0)
    {
        listView1.Items.Add(dataReader.GetValue(0).ToString());

        // The error happens on the following line
        listView1.Items[i].SubItems.Add(dataReader.GetValue(1).ToString());

        listView1.Items[i].SubItems.Add(dt0.ToShortDateString());
        listView1.Items[i].SubItems.Add(dataReader.IsDBNull(3) ? "0" : dataReader.GetString(3));
        listView1.Items[i].SubItems.Add(dataReader.IsDBNull(4) ? "0" : dataReader.GetDouble(4).ToString("n2"));
        listView1.Items[i].SubItems.Add(dataReader.IsDBNull(5) ? "-" : dataReader.GetString(5));
    }

    i++;
}

objConn.Close();

列表視圖包含以下列:ID-數字-帳單日期-供應商-總計-注意

我可能已經發現了問題。

如果第一次圍繞“ if(Date1> = 0 && Date2 <= 0)”狀態評估結果為false,則i索引仍將遞增。 然后在第二次迭代中,如果if語句的計算結果可能為true,則索引將一一對應,因為ListView中只有一個Item,但是您嘗試使用listView1.Items [1],而不是listView1.Items [0],這是正確的。

解決方案是將代碼更改為:

if (Date1 >= 0 && Date2 <= 0)
{
    listView1.Items.Add(dataReader.GetValue(0).ToString());
    listView1.Items[i].SubItems.Add(dataReader.GetValue(1).ToString());// The error appears on this line

    listView1.Items[i].SubItems.Add(dt0.ToShortDateString());
    listView1.Items[i].SubItems.Add(dataReader.IsDBNull(3) ? "0" : dataReader.GetString(3));
    listView1.Items[i].SubItems.Add(dataReader.IsDBNull(4) ? "0" : dataReader.GetDouble(4).ToString("n2"));
    listView1.Items[i].SubItems.Add(dataReader.IsDBNull(5) ? "-" : dataReader.GetString(5));
    i++;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM