积极答复者
gridview传值出错

问题
-
我在一个包含gridview的页面 设置了每一行的RowCommand事件 通过e.CommandArgument.ToString();给一个session赋值(session值就是主键),在另一个页面显示gridview中选中行的信息 并更改返回数据库,我的数据库更新方法传的是一个类(类中包含主键),传的时候还是正常取值,但返回的时候主键值就变成了0,但session值却没不变。请问,应该怎么解决? 加急!!!
protected void blogNewsGridView_RowCommand(object sender, GridViewCommandEventArgs e)
{if (e.CommandName == "View")
{
Session["blogNewsId"] = e.CommandArgument.ToString();
Response.Redirect("BlogNewsPage.aspx");
}
}
这是主页的GirdView的RowCommand代码
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
b.NewId = Convert.ToInt32(Session["blogNewsId"]); ------------------------session值是对的,b.NewId 始终是零
b = bb.GetNews(b.NewId); ------------对应信息还可以读出来,单步跟踪时b.NewId 却是零
newTitleTextBox.Text = b.NewTitle;
newsContentTextBox.Text = b.NewContent;
newUpdateTimeTextBox.Text = b.NewUpdateTime.ToString();
if (Session["name"].ToString() == "chumen")
{
btUpdate.Visible = true;
}
else
{
btUpdate.Visible = false;
btWrite.Visible = false;
Message.Text = "你不是管理员,不能更新文章!";
}
}
}
protected void btWrite_Click(object sender, EventArgs e)
{
Response.Write(b.NewId);
b = bb.GetNews(b.NewId);
b.NewTitle = newTitleTextBox.Text;
b.NewContent = newsContentTextBox.Text;
b.NewUpdateTime = DateTime.Now;
if (bb.UpdateNews(b)) ------------------因为b.NewId 始终是零,数据写不到数据库中
{
newsTitleLabel.Visible = false;
newTitleTextBox.Visible = false;
newUpdateTimeLabel.Visible = false;
newUpdateTimeTextBox.Visible = false;
newsContentLabel.Visible = false;
newsContentTextBox.Visible = false;
btUpdate.Visible = false;
btWrite.Visible = false;
btRetrun.Visible = true;
Message.Text = "文章已重新更新到博客!";
}
}
这是更新页的代码- 已移动 肖小勇Moderator 2010年1月5日 1:36 asp.net 相关问题 (发件人:ADO.NET 与 LINQ)
- 已编辑 chumen 2010年1月5日 10:04
答案
-
你好!1 这里可以不用 Session 在绑定的时候将主键赋给 CommandArgument 或设置 GridView 的 DataKeyNames 通过 GridView.DataKeys[index] 获取主键。CommandArgument 写法如下:<asp:Button ID="btnUpdate" CommandName="Update" CommandArgument='<%# Eval("Id") %>' OnClientClick="return confirm('您确定要更新吗?');" runat="server" Text="更新" />2 既然是主键那么在更新前后是不会变化的,所以我觉得不用返回。3 你可以使用GridView 自带的更新,RowUpdating,RowUpdated 事件参数能够方便的获取更新前后的信息。
知识改变命运,奋斗成就人生!- 已标记为答案 KeFang Chen 2010年1月8日 3:54
全部回复
-
你好!1 这里可以不用 Session 在绑定的时候将主键赋给 CommandArgument 或设置 GridView 的 DataKeyNames 通过 GridView.DataKeys[index] 获取主键。CommandArgument 写法如下:<asp:Button ID="btnUpdate" CommandName="Update" CommandArgument='<%# Eval("Id") %>' OnClientClick="return confirm('您确定要更新吗?');" runat="server" Text="更新" />2 既然是主键那么在更新前后是不会变化的,所以我觉得不用返回。3 你可以使用GridView 自带的更新,RowUpdating,RowUpdated 事件参数能够方便的获取更新前后的信息。
知识改变命运,奋斗成就人生!- 已标记为答案 KeFang Chen 2010年1月8日 3:54