none
gridview传值出错 RRS feed

  • 问题

  • 我在一个包含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
    2010年1月4日 9:49

答案

  • 你好!

    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 事件参数能够方便的获取更新前后的信息。

    知识改变命运,奋斗成就人生!
    2010年1月5日 1:35
    版主

全部回复

  • 你好!

    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 事件参数能够方便的获取更新前后的信息。

    知识改变命运,奋斗成就人生!
    2010年1月5日 1:35
    版主
  • 你好,

    你"返回的时候主键值就变成0“什么意思?
    另外你最好贴上一些相关的代码,这样好帮助我们分析,谢谢。
    Microsoft Online Community Support
    2010年1月5日 6:55
  • 确实没看懂,请把源代码贴出来吧
    2010年1月5日 7:04
  • b.NewId = Convert.ToInt32(Session["blogNewsId"]); 
    这个b是哪里来的?
    2010年1月5日 10:21
  • b是我定义的一个保存从数据库取出信息的类 这个b.NewId 就是用来保存表中的主键信息 session值中保存的也是主键
    2010年1月5日 10:25
  • 你好,

    根据你贴出的代码看不出什么问题。

    既然session里面的值是对的,那可能是赋值的时候出了问题。

    能否提供你的‘b’的定义代码以及这个session里面保存的字符串是整型的字符串还是其它什么类型的字符串。
    谢谢
    Microsoft Online Community Support
    2010年1月6日 1:53
  • session值是对的,b.NewId 始终是零??
    b.NewId = Convert.ToInt32(Session["blogNewsId"]);

    你打印出Session["blogNewsId"]不是0?

    这样的功能无需使用 Session,内置的功能已经够用了。
     Session很容易丢失的

    【孟子E章】
    2010年1月7日 14:59
    版主