我在绑定一个GridView的时候,里面添加了一个绑定列,并用Eval()方法进行了绑定
为什么我取不到它的值?自动绑定列的值却可以取到.谁能帮帮我啊。
        <asp:GridView ID="GridView1" runat="server" Width="100%">
            <Columns>
                <asp:TemplateField HeaderText="123">
                <ItemTemplate>
                <%# Eval("Weight")%>
                </ItemTemplate>
                
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
      </div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
  protected void Page_Load(object sender, EventArgs e)
    {
        shopCart myCart = new shopCart();
        DataTable dt = myCart.getMyCart(9);
        this.GridView1.DataSource = dt.DefaultView;
        this.GridView1.DataBind();
        this.Label1.Text = this.GridView1.Rows[0].Cells[0].Text;
    }

解决方案 »

  1.   

    用的模板列需要用
    foreach(GridViewRow gvr in GridView1.Rows)
    {
       Button btn=(Button)gvr.FindControl("Button1");
       //需要像这样找到嵌在GridView中的控件才能拿来使用,肯定不能直接使用
    }
      

  2.   

    比如:
    <asp:GridView ID="GridView1" runat="server".....>
    ....
    <asp:TemplateField HeaderText="用户编号" SortExpression="au_id">
                        <ItemStyle HorizontalAlign="Center" />
                        <HeaderStyle HorizontalAlign="Center" />
                        <ItemTemplate>
                            <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>' NavigateUrl='<%# "GridViewMubiao.aspx?id="+DataBinder.Eval(Container.DataItem,"au_id") %>' Target="_blank"></asp:HyperLink>
                        </ItemTemplate>
                    </asp:TemplateField>
    </asp:GridView>
      

  3.   

    GridView1.Rows[0].Cells[0]写法不适用于模板列 要使用 GridView1.Rows[0].FindControl("x")例子<%@ Page Language="C#"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">
      // 计算数据,完全可以从数据看取得
      ICollection CreateDataSourceByXianhuiMeng()
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));    for (int i = 0; i < 8; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = "班级" + i.ToString();
          dr[1] = "【孟子E章】" + i.ToString();
          dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
          dt.Rows.Add(dr);
        }
        System.Data.DataView dv = new System.Data.DataView(dt);
        return dv;
      }  protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          GridView1.DataSource = CreateDataSourceByXianhuiMeng();
          GridView1.DataBind();
          this.Label1.Text = this.GridView1.Rows[0].Cells[1].Text;
          this.Label2.Text = ((Literal)this.GridView1.Rows[0].FindControl("x")).Text;
        }
      }  
    </script><html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
    </head>
    <body>
      <form id="form1" runat="server">
        <asp:GridView ID="GridView1" runat="server" Font-Size="12px" CellPadding="3">
          <HeaderStyle BackColor="#EDEDED" />
          <Columns>
            <asp:TemplateField HeaderText="模版列">
              <ItemTemplate>
              <asp:Literal ID="x" runat="server" Text='<%#Eval("学生姓名") %>' />
              </ItemTemplate>
            </asp:TemplateField>
          </Columns>
        </asp:GridView>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
      </form>
    </body>
    </html>
      

  4.   

    前台想用Eval()方法绑定好
    然后在后台C#:
    ------------------------------------------------------------
    HyperLink hp;
    ...
    hp = (HyperLink)gvr.FindControl("HyperLink1");
    ...=hp.Text;
    //这个时候找到这个控件才能使用
      

  5.   

    Rows[0].Cells[0]写法不适用于模板列,只能用在自动生成的列
      

  6.   

    我里面没有嵌套控件,我怎么强制转换控件啊.
    我是直接Eval绑定的.怎么取值呢?是也试过用Label来绑定Text来绑定值,也取不出来啊.
    this.Label1.Text = ((Label)(this.GridView1.Rows[0].Cells[0].Controls[0])).Text;报错        
    无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.Label”。
      

  7.   

    this.Label1.Text = ((Label)(this.GridView1.Rows[0].Cells[0].Controls[0])).Text
    把(Label)去掉啊~~~
      

  8.   

    this.Label1.Text = =this.GridView1.Rows[0].Cells[0].Text这样试试
      

  9.   

    GridView这个控件 要先实力化行对象 然后才能用FindControl方法去找模板列中的控件实力化行:
    用遍历的方法好点:
    foreach(GridViewRow gvr in GridView1.Rows)
    或是要找某一行中的模板列中的控件:
    Button btn=(Button)GridView1.Rows[0].FindControl("Button1-->控件ID");
      

  10.   

    this.Label1.Text = =this.GridView1.Rows[0].Cells[0].Text??这样行吗?
      

  11.   

    那你就往模板里中放一个控件不就得了吗
       <ItemTemplate>
    <asp:HyperLink ID="HyperLink1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>'
       </ItemTemplate>
    不就得了 怎么简单怎么来啊  干什么非要怎么难怎么做啊,再说模板列就是用来放置控件用的
      

  12.   

    不是都说了吗 模板里中用GridView1.Rows[0].Cells[0].Text 不行
    除非你是绑定列 才能这样用
    模板列中要用  FindControl去找
    所以你在模板列中放一个控件
    再在前台用 Eval()绑定一下值
      

  13.   

    <ItemTemplate>
         <asp:Label ID="Label2" runat="server" Text='<%# Eval("Weight")%>'></asp:Label>
       </ItemTemplate>我这样做了啊.但为什么也取不出来.
    this.Label1.Text = ((Label)(this.GridView1.Rows[0].Cells[0].Controls[0])).Text;报错        
    无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型“System.Web.UI.WebControls.Label”。
      

  14.   

    我是直接Eval绑定的.怎么取值呢?
    一定要加一个 Literal 控件 ,不是代码都写出来了嘛?