我是用IList<XXInfo>绑定的GridView,然后我想要获得行源数据
就是获取那行的XXInfo,不要一个个的获取,如:GridView1.Rows[GridView1.EditIndex].Cells[0].Text什么的,
有没有像repeater控件的XXInfo xx=(XXInfo)Repeater1.Items[0];这样直接获取的?还有个问题就是在    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        MessageInfo mess = new MessageInfo();
        mess.ID = Convert.ToInt32(GridView1.DataKeys[e.RowIndex].Value);
        mess.Reply = ((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[3].Controls[0])).Text;
        MessageBLL.SaveMessage(mess);
        GridView1.EditIndex = -1;
        MyDataBind();
    }
什么情况下((TextBox)(GridView1.Rows[GridView1.EditIndex].Cells[3].Controls[0])).Text这里取的值一直是修改前的?意思就是比如我点了更新,然后变成了TextBox的模样,打了几个字上去,点更新的时候发现获取的值还是修改之前的
这是什么情况?

解决方案 »

  1.   

    if(!IsPostBack)
    {
    //绑定数据
    }
    根据GridView1.Rows[GridView1.EditIndex].Cells[0].Text或
    GridView1.DataKeys[e.RowIndex].Value查询获取实体对象
      

  2.   

    你这个(TextBox)GridView1.Rows[GridView1.EditIndex].Cells[3].Controls[0]在哪里?
    ItemTemplate还是EditItemTemplate?
      

  3.   

    晕,是忘记放在
    if(!IsPostBack) 

    //绑定数据 
    }
    里了....
    那第一个问题:不能直接从GridView中提取实体对象么?
      

  4.   

    在RowDataBound事件里可以用DataRowView,
    在RowUpdating中,如果你不想找控件,可以通过DataKeys重新读数据库
      

  5.   


            int count = GridView1.Rows[e.NewEditIndex].Controls.Count;
            for (int i = 0; i < count; i++)
            {
                Label5.Text += ((Label)GridView1.Rows[e.NewEditIndex].Controls[i]).Text;
            }
    除非你的item里面的数据空间都为同种类型比如label。 不然会报转换错误....因为取子控件的值的时候需要强转。
      

  6.   

    不用查数据库 把集合存到ViewState,在需要的事件中取出来遍历下你这个集合和你这一行的主键ID相等就跳出来不就取到你这一行的实体了吗
      

  7.   

    if(!IsPostBack) 

    //绑定数据 

    根据GridView1.Rows[GridView1.EditIndex].Cells[0].Text或 
    GridView1.DataKeys[e.RowIndex].Value查询获取实体对象顶 如梦