gpt4 book ai didi

c# - InvalidArgument=“3' is not valid for ' 索引”的值。参数名称 : index

转载 作者:行者123 更新时间:2023-11-29 12:01:07 26 4
gpt4 key购买 nike

我的代码中出现此错误:InvalidArgument=“3”的值对于“索引”无效。参数名称:索引, 当我只想填充 ListView 的部分行时!这是我的代码:

 MySqlCommand cmd = new MySqlCommand("select acc_Id,acc_Name,acc_Place from accounts where archived=0 and  cus_Sup=" + 0 , objConn);
MySqlDataReader dataReader = cmd.ExecuteReader();
int i = 0;
while (dataReader.Read())
{
if (i % 2 == 0)
listView2.Items.Add(dataReader.GetValue(0).ToString()).BackColor = Color.Lavender;
else
listView2.Items.Add(dataReader.GetValue(0).ToString());

listView2.Items[i].SubItems.Add(dataReader.GetString(1).ToString());

listView2.Items[i].SubItems.Add((dataReader.IsDBNull(2) ? "No place added" : dataReader.GetString(2)));
//------------------------------------I meant here !
listView2.Items[i].SubItems.Add("0");
listView2.Items[i].SubItems.Add("0");
listView2.Items[i].SubItems.Add("0");

}
dataReader.Close();


//-------------load bills
for (int x = 0; x < listView2.Items.Count; x++)
{
cmd = new MySqlCommand("select c.acc_Id,a.bill_Number,a.bill_Date,c.acc_Name,Sum( (b.de_Quantity * b.de_Price) - ((b.de_Quantity * b.de_Price)*b.de_DisRate/100) ),a.bill_TaxRate,a.bill_DisRate,a.bill_Note,c.acc_Place from (accounts c right JOIN bills a on c.acc_Id = a.bill_From) LEFT JOIN bill_Details b on a.bill_Id = b.bill_Id where c.acc_Id = " + listView2.Items[x].SubItems[0].Text + " group by a.bill_Id,a.bill_Number,a.bill_Date,c.acc_Name,a.bill_TaxRate,a.bill_DisRate,a.bill_Note,c.acc_Place ", objConn);
dataReader = cmd.ExecuteReader();

decimal totalSum = 0, summBills = 0;
i = 0;
while (dataReader.Read())
{

totalSum = decimal.Parse(dataReader.IsDBNull(4) ? "0" : dataReader.GetDecimal(4).ToString("n2"));
totalSum -= (totalSum * decimal.Parse(dataReader.IsDBNull(6) ? "0" : dataReader.GetDecimal(6).ToString("n2")) / 100);
totalSum += (totalSum * decimal.Parse(dataReader.IsDBNull(5) ? "0" : dataReader.GetDecimal(5).ToString("n2")) / 100);
summBills += totalSum;
i++;
}
//MessageBox.Show(dataReader.GetValue(0).ToString()+" "+summBills.ToString());
listView2.Items[x].SubItems[3].Text = summBills.ToString("n2");// the error here !

dataReader.Close();

}

它只是打印第一条记录的值! ,当它移动到第二个时出现错误!

最佳答案

您已向每个 ListView 项目添加了 3 个子项目。它们将是 Items[x].SubItems[0] 到 SubItems[2]。您需要添加 4 个子项才能使用子项[3]。

编辑:

当您在顶部循环中添加项目时,您不会增加 i - 您需要将顶部循环更改为:

            int i = 0;
while (dataReader.Read())
{
if (i % 2 == 0)
listView2.Items.Add(dataReader.GetValue(0).ToString()).BackColor = Color.Lavender;
else
listView2.Items.Add(dataReader.GetValue(0).ToString());

listView2.Items[i].SubItems.Add(dataReader.GetString(1).ToString());

listView2.Items[i].SubItems.Add((dataReader.IsDBNull(2) ? "No place added" : dataReader.GetString(2)));
//------------------------------------I meant here !
listView2.Items[i].SubItems.Add("0");
listView2.Items[i].SubItems.Add("0");
listView2.Items[i].SubItems.Add("0");

i++;
}
dataReader.Close();

否则,您每次都会向 ListView 添加一个新项目,但每次都会向 listView2.Items[0] 添加子项目。这就是为什么第二个失败的原因。 Items[0] 有 5 个子项的某个倍数,其余没有。

关于c# - InvalidArgument=“3' is not valid for ' 索引”的值。参数名称 : index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32359228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com