none
在gridview里面用模板字段,在RowDataBound事件捕获不到值? RRS feed

  • 问题

  • asp代码如下
    
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
                DataSourceID="SqlDataSource1" ondatabound="GridView1_DataBound" 
                onrowdatabound="GridView1_RowDataBound">
                <Columns>
                    <asp:TemplateField HeaderText="Name" SortExpression="LastName">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label1" runat="server" Text='<%# Bind("LastName") %>'></asp:Label>
                            <asp:Label ID="Label2" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Address" SortExpression="Address">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("Address") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label3" runat="server" Text='<%# Bind("Address") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="City" SortExpression="City">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("City") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="Label4" runat="server" Text='<%# Bind("City") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
                SelectCommand="SELECT [LastName], [FirstName], [Address], [City] FROM [Employees]">
            </asp:SqlDataSource>
    
    在RowDataBound事件里面 e.Row.DataItem 一直为空。
    但不用模版字段则可以捕获到值,请问这是为什么?我哪里错了?

    something is OK.
    2009年6月3日 5:47

答案

  • 可以通过 FindControl 来获取

    string s = ((Label3)e.Row.FindControl("Label3")).Text;

    知识改变命运,奋斗成就人生!
    2009年6月3日 6:29
    版主
  • if (e.Row.RowType == DataControlRowType.DataRow)
    {
      e.Row.Cells[0].Attributes.Add("style","border:1px solid red");
    }
    【孟子E章】
    2009年6月3日 9:58
    版主
  • 楼主,你好

    根据我的测试是不为空的。
    protected void GridView3_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType==DataControlRowType.DataRow)
            {
               ///////
            }
        }
    我发现你的代码中有两个事件ondatabound="GridView1_DataBound" 和 onrowdatabound="GridView1_RowDataBound"。
    不知道你是否是在GridView1_RowDataBound方法中测试的e.Row.DataItem.

    Microsoft Online Community Support
    2009年6月4日 3:19

全部回复

  • 可以通过 FindControl 来获取

    string s = ((Label3)e.Row.FindControl("Label3")).Text;

    知识改变命运,奋斗成就人生!
    2009年6月3日 6:29
    版主
  • 你好,谢谢你的回答。
    但如果我是想通过DataBound这个事件来控制一个单元格的样式(或者说是一个cell的样式),请问如何控制? 按这种方法只能得到当前值啊

    something is OK.
    2009年6月3日 8:33
  • 既然是模板,样式可以在ItemStyle 里设置,也可以通过程序设置,你要清楚:微软发布了好几个控件,GridView,DataList,Repeater,ListView,不同的控件有自己的优缺点,当一个不能胜任时,可以考虑换别的。
    【孟子E章】
    2009年6月3日 9:54
    版主
  • if (e.Row.RowType == DataControlRowType.DataRow)
    {
      e.Row.Cells[0].Attributes.Add("style","border:1px solid red");
    }
    【孟子E章】
    2009年6月3日 9:58
    版主
  • 楼主,你好

    根据我的测试是不为空的。
    protected void GridView3_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType==DataControlRowType.DataRow)
            {
               ///////
            }
        }
    我发现你的代码中有两个事件ondatabound="GridView1_DataBound" 和 onrowdatabound="GridView1_RowDataBound"。
    不知道你是否是在GridView1_RowDataBound方法中测试的e.Row.DataItem.

    Microsoft Online Community Support
    2009年6月4日 3:19