c# 如何获取dataGridView中的数据利用Live<>加入数据库

yitiaosiyu_qiu 2009-05-04 07:48:28
我设计一个窗体,有一个dataGridView,向dataGridView添加数据,添加多条然后单击按钮全部添加到数据库,我想用Live<>实现,但是现在读不出来数据我的代码如下
private void button1_Click(object sender, EventArgs e)
{
IncomeManager add = new IncomeManager();
int Userid = add.user();
List<Account> addAccount = new List<Account>();
if (dataGridView1.RowCount > 0)
{
dataGridView1.AreAllCellsSelected(true);

for (int i = 1; i < dataGridView1.Rows.Count; i++)
{
DateTime Time = Convert.ToDateTime(this.dataGridView1.SelectedRows[i].Cells["ColumnTime"].Value.ToString());
double Amount = Convert.ToDouble(this.dataGridView1.SelectedRows[i].Cells["ColumnAmount"].Value.ToString());
string Item = this.dataGridView1.SelectedRows[i].Cells["ColumnItem"].Value.ToString();
string Remarks = this.dataGridView1.SelectedRows[i].Cells["ColumnRemarks"].Value.ToString();
Account accout = new Account();
accout.AccountTime = Time;
accout.AccountAmount = Amount;
accout.AccountItem = Item;
accout.AccountRemarks = Remarks;
accout.AccountType = typeid;
accout.AccountUser = Userid;
addAccount.Add(accout);
}

}foreach (Account adddast in addAccount)
{
SqlConnection conn = getConnection();
conn.Open();
int count = 0;
try
{
string sql = string.Format("insert into Account (AccountTime,AccountPrice,AccountItem,AccountRemarks,TypeId,UserId) values('{0}',{1},'{2}','{3}',{4},{5})", adddast.AccountTime, adddast.AccountAmount, adddast.AccountItem, adddast.AccountRemarks, adddast.AccountType, adddast.AccountUser);

SqlCommand command = new SqlCommand(sql, conn);
count = (int)command.ExecuteNonQuery();
if (count == 1)
{
MessageBox.Show("插入成功");
}
else
{
MessageBox.Show("ssssssss");
}


}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Close();
}
}



}

就是读不出来全部的数据,一开始只能添加第一行的数据,其他行的就添加不进去了,现在是有异常System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。
参数名: index
请各位高手帮忙
...全文
160 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yitiaosiyu_qiu 2009-05-04
  • 打赏
  • 举报
回复
谢谢了,就是把里面的所有SelectedRows都换成Rows就可以了,
if(dataGridView1.Rows[i].Selected)
{

}
这个If语句也不用要
dataGridView1.AreAllCellsSelected(true);
全选也可以不要
谢谢了
zealot1021 2009-05-04
  • 打赏
  • 举报
回复
上面漏掉一个,总之就是把

if(dataGridView1.Rows[i].Selected)
{

}

里面的所有SelectedRows换成Rows
zealot1021 2009-05-04
  • 打赏
  • 举报
回复
鄙人认为应该这样写,这样就可以把所有选中行添加了


for (int i = 1; i < dataGridView1.Rows.Count; i++)
{
if(dataGridView1.Rows[i].Selected)
{
DateTime Time = Convert.ToDateTime(this.dataGridView1.SelectedRows[i].Cells["ColumnTime"].Value.ToString());
double Amount = Convert.ToDouble(this.dataGridView1.Rows[i].Cells["ColumnAmount"].Value.ToString());
string Item = this.dataGridView1.Rows[i].Cells["ColumnItem"].Value.ToString();
string Remarks = this.dataGridView1.Rows[i].Cells["ColumnRemarks"].Value.ToString();
Account accout = new Account();
accout.AccountTime = Time;
accout.AccountAmount = Amount;
accout.AccountItem = Item;
accout.AccountRemarks = Remarks;
accout.AccountType = typeid;
accout.AccountUser = Userid;
addAccount.Add(accout);
}
}
zealot1021 2009-05-04
  • 打赏
  • 举报
回复

for (int i = 1; i < dataGridView1.Rows.Count; i++)
{
DateTime Time = Convert.ToDateTime(this.dataGridView1.SelectedRows[i].Cells["ColumnTime"].Value.ToString());
double Amount = Convert.ToDouble(this.dataGridView1.SelectedRows[i].Cells["ColumnAmount"].Value.ToString());
string Item = this.dataGridView1.SelectedRows[i].Cells["ColumnItem"].Value.ToString();
string Remarks = this.dataGridView1.SelectedRows[i].Cells["ColumnRemarks"].Value.ToString();
Account accout = new Account();
accout.AccountTime = Time;
accout.AccountAmount = Amount;
accout.AccountItem = Item;
accout.AccountRemarks = Remarks;
accout.AccountType = typeid;
accout.AccountUser = Userid;
addAccount.Add(accout);
}

这段代码里,dataGridView1.Rows.Count比如这个值为10吧,但是你的SelectedRows[i],也就是选中的行有10个吗?一共10行,每行都是选中的?应该不是吧,假设你只有5个选中行,那SelectedRows[i]中的i一旦大于4,那肯定会出这个错误呀,因为一共才5行,而SelectedRows[5]是第6行了,呵呵

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧