使用ASP.NET创建网站时遇到问题。
我正在执行查看历史记录功能,用户在付款和参加活动后,可以在包含研讨会详细信息和付款详细信息的评论页面中撰写反馈。
当我从数据库中检索并从过去的事件中获得一些Review History时,它可以正常工作。这可以通过Review表手动添加评论和id评级来完成。
但是,当我想要检索用户已参加的研讨会时,但未审阅研讨会时,会出现错误消息:
system.ArgumentOutOfRangeException: Index was out of range.
产生错误的行如下:
Review c = reviews[gvSeminar.SelectedIndex];
经过调试,我意识到价值:评论的值为Count:1。有趣的是,当我点击一个id有评论和评级时,值:评论也有一个Count值:1。因此,对于没有审核的ID,该程序显示超出范围的消息,因为此部分下没有评论或评级。
Review c = reviews[gvSeminar.SelectedIndex];
tbxRating.Text = c.Rating.ToString();
tbxRemarks.Text = c.Remarks;
如果数据为null
,我想让它工作,因为默认情况下没有评论或评级,因此用户可以将一些反馈写入查看历史记录。
查看历史记录(在ViewHistory.aspx
的网格视图中选择过去的事件或新事件时):
...
{
Panel1.Visible = true;
Member m = (Member)Session["user"];
List<ShoppingCart> shoppingcarts = ShoppingCartDBMgr.getAllShoppingCart(m.Email);
gvSeminar.DataSource = shoppingcarts;
gvSeminar.DataBind();
List<Seminar> seminars = SeminarMgr.getAllSeminar();
List<Schedule> schedules = ScheduleMgr.getAllSchedule();
List<Review> reviews = ReviewDBMgr.getAllReviewById(m.Email);
Seminar a = seminars[gvSeminar.PageSize * gvSeminar.PageIndex + gvSeminar.SelectedIndex];
Schedule b = schedules[gvSeminar.SelectedIndex];
if (reviews != null)
{
Review c = reviews[gvSeminar.SelectedIndex];
tbxRating.Text = c.Rating.ToString();
tbxRemarks.Text = c.Remarks;
}
else
{
Review r = new Review()
{
Rating = Convert.ToInt32(tbxRating.Text),
Remarks = tbxRemarks.Text
};
int id = ReviewDBMgr.insertReview(r);
lblOutput.Text = id + "Added!";
}
tbxId.Text = a.Id;
tbxName.Text = a.Name;
tbxPrice.Text = a.Price.ToString();
tbxDate.Text = b.Date.ToShortDateString();
}
更新按钮以添加评论:
...
{
Member m = (Member)Session["user"];
List<ShoppingCart> shoppingcarts = ShoppingCartDBMgr.getAllShoppingCart(m.Email);
gvSeminar.DataSource = shoppingcarts;
gvSeminar.DataBind();
List<Review> reviews = ReviewDBMgr.getAllReviewById(m.Email);
if (reviews == null)
{
Review c = reviews[gvSeminar.SelectedIndex];
tbxRating.Text = c.Rating.ToString();
tbxRemarks.Text = c.Remarks;
Review r = new Review()
{
Rating = Convert.ToInt32(tbxRating.Text),
Remarks = tbxRemarks.Text
};
int id = ReviewDBMgr.insertReview(r);
lblOutput.Text = id + "Added!";
}
}
数据库管理员:
public static int insertReview(Review r)
{
SqlConnection con = new SqlConnection(conStr);
try
{
SqlCommand command = new SqlCommand();
command.Connection = con;
command.CommandText = "insert into Review (rev_rating, rev_remarks, sem_id, participant_email) values (@rev_rating, @rev_remarks, @sem_id, @participant_email)";
command.Parameters.AddWithValue("@rev_rating", r.Rating);
command.Parameters.AddWithValue("@rev_remarks", r.Remarks);
command.Parameters.AddWithValue("@sem_id", r.Seminar.Id);
command.Parameters.AddWithValue("@participant_email", r.Member.Email);
con.Open();
return command.ExecuteNonQuery();
}
finally
{
con.Close();
}
}
答案 0 :(得分:0)
这是你的插入命令
command.CommandText = "insert into Review (rev_rating, rev_remarks, sem_id, participant_email) values (@rev_rating, @rev_remarks, @sem_id, @participant_email)";
要在表格中 Udpate ,您已将其更改为
command.CommandText = "UPDATE Review SET rev_rating = @rev_rating, rev_remarks = @rev_remarks Where sem_id = @sem_id";