none
最终生成的页面的源代码里看不到子页的GridView,求教 RRS feed

  • 问题

  • 一个带了个gridview的子页,继承自一个干净的母版,在浏览器最终生成的页面里完全看不到那个gridview的踪迹,有没有什么办法可以看到?

     

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterTest.master" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="conttest" Runat="Server">
        <div style="height: 248px">
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <div style="height: 211px">
                        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
                            onrowdatabound="rowtext">
                            <Columns>
                                <asp:TemplateField HeaderText="id">
                                    <ItemTemplate>
                                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
                                        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
                        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
                    </div>
                </ContentTemplate>
            </asp:UpdatePanel>
    </div>
    </asp:Content>

     

    CS

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
    using System.Data;
    public partial class Default3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
        }
        protected void rowtext(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string str = ((Label)e.Row.Cells[0].FindControl("Label1")).Text;
                ((TextBox)e.Row.Cells[0].FindControl("TextBox2")).Text = "";
            }  
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string constr = "server=192.168.0.1;user id=sa;pwd=0020;database=pub";
            SqlConnection sqlcon = new SqlConnection(constr);
            try
            {
                string str = "select top 5 code as id from pubttl";
                DataSet dt = new DataSet();
                SqlDataAdapter sqldt = new SqlDataAdapter(str, sqlcon);
                sqldt.Fill(dt);
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
            catch (Exception err)
            {
            }
        }
    }
    2010年4月2日 8:07

答案

  • 你好,我试了下,把updatepanel设置成如果那个button被点击,那么就触发一个同步更新就可以了。

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <%@ Register Assembly="MyCustomControls" Namespace="MyCustomControls" TagPrefix="ccl" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
       
        
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
        
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="Id">
            <Columns>
                <asp:CommandField ShowSelectButton="True" />
                <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" 
                    ReadOnly="True" SortExpression="Id" />
                <asp:BoundField DataField="ImageName" HeaderText="ImageName" 
                    SortExpression="ImageName" />
                <asp:BoundField DataField="Des" HeaderText="Des" SortExpression="Des" />
                <asp:BoundField DataField="Path" HeaderText="Path" SortExpression="Path" />
                <asp:TemplateField>
                <ItemTemplate>
                    <ccl:NumericTextBox ID="NumericTextBox1" runat="server"  NumberOfFraction="3" NumberOfInteger="2" Text='<%# Eval("CategoryId") %>'  AllowNegative="true"  Type="Decimal" ></ccl:NumericTextBox>
                </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="CategoryId" HeaderText="CategoryId" 
                    SortExpression="CategoryId" />
            </Columns>
        </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:test_EmployeeInfo_SKConnectionString %>" 
            SelectCommand="SELECT * FROM [Images]"></asp:SqlDataSource>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        
        </ContentTemplate>
        <Triggers >
       <asp:PostBackTrigger ControlID="Button1" />
          </Triggers>
        </asp:UpdatePanel>
        
    
        </form>
    </body>
    </html>
    

     

     protected void Button1_Click(object sender, EventArgs e)
        {
            this.GridView1.DataSource=this.SqlDataSource1;
    
            this.GridView1.DataBind();
        }

    Microsoft Online Community Support
    2010年4月7日 1:35

全部回复

  • 刚开始贴错了,现在换了有问题那个

    2010年4月2日 9:09
  • 你好,

    如果仅仅是最终生成的页面里你通过view source,看不到生成的html代码中有任何关于gridview的代码,你检查下是否gridview有数据绑定。

    如果没有数据绑定肯定是没有的。


    Microsoft Online Community Support
    2010年4月5日 2:47
  • 那个select出来的有数据,在页面也能显示结果,在gridview里我有些自定义textbox,结果在运行时出现“没有可执行代码”的错误,在源码的updatepanel里又看不到gridview,所以也没有出现控件自定义的onclick等事件,即不能运行,也没法调试,那些自定义textbox放到gridview外倒是可以正常工作

    2010年4月6日 1:17
  • 你好,

    那问题可能是你自定义的控件所引起的。你看看能否调试该自定义的控件试试。

    另外不知道你的自定义是怎么做的,Framework3.5的textbox你可以用reflector看看,它是继承了下面几个

    WebControl, IPostBackDataHandler, IEditableTextControl, ITextControl


    Microsoft Online Community Support
    2010年4月6日 1:37
  • 我的自定义控件是这个

    http://www.codeproject.com/KB/custom-controls/CreateNumTextBoxControl.aspx

    放到我上面贴的那段的gridview的textbox下就可以了,js文件要稍微修改下,updatepanel+gridview 下做模板列就会出错,放在其他updatepanel+任何环境都没问题

    模板列那里变成

    <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
       <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
        <cc2:NumericTextBox ID="TextBox1" runat="server" Text=""></cc2:NumericTextBox>

     

    2010年4月6日 2:07
  • 你好,

    我测试过了,没有问题啊。

    关键是上面下载的那个项目中js有些错误,改后就好了。

    我这边放在gridview的模板列里很好的。

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    <%@ Register Assembly="MyCustomControls" Namespace="MyCustomControls" TagPrefix="ccl" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
      
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
        
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="Id" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:CommandField ShowSelectButton="True" />
                <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" 
                    ReadOnly="True" SortExpression="Id" />
                <asp:BoundField DataField="ImageName" HeaderText="ImageName" 
                    SortExpression="ImageName" />
                <asp:BoundField DataField="Des" HeaderText="Des" SortExpression="Des" />
                <asp:BoundField DataField="Path" HeaderText="Path" SortExpression="Path" />
                <asp:TemplateField>
                <ItemTemplate>
                    <ccl:NumericTextBox ID="NumericTextBox1" runat="server"  NumberOfFraction="3" NumberOfInteger="2" Text='<%# Eval("CategoryId") %>'  AllowNegative="true"  Type="Decimal" ></ccl:NumericTextBox>
                </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="CategoryId" HeaderText="CategoryId" 
                    SortExpression="CategoryId" />
            </Columns>
        </asp:GridView>
        </ContentTemplate>
        </asp:UpdatePanel>
    
        
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:test_EmployeeInfo_SKConnectionString %>" 
            SelectCommand="SELECT * FROM [Images]"></asp:SqlDataSource>
        </form>
    </body>
    </html>
    你可以单独建个新项目做下测试,如果那个项目中js修改好了应该是没有问题的。

    Microsoft Online Community Support
    2010年4月6日 5:07
  • 楼上试下用我那种用按钮读数据放进去的看看。直接绑datasource可以,但select进去或者动态建立table等方法就不行了

    2010年4月6日 6:19
  • 你好,我试了下,把updatepanel设置成如果那个button被点击,那么就触发一个同步更新就可以了。

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <%@ Register Assembly="MyCustomControls" Namespace="MyCustomControls" TagPrefix="ccl" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
       
        
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
        
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
            DataKeyNames="Id">
            <Columns>
                <asp:CommandField ShowSelectButton="True" />
                <asp:BoundField DataField="Id" HeaderText="Id" InsertVisible="False" 
                    ReadOnly="True" SortExpression="Id" />
                <asp:BoundField DataField="ImageName" HeaderText="ImageName" 
                    SortExpression="ImageName" />
                <asp:BoundField DataField="Des" HeaderText="Des" SortExpression="Des" />
                <asp:BoundField DataField="Path" HeaderText="Path" SortExpression="Path" />
                <asp:TemplateField>
                <ItemTemplate>
                    <ccl:NumericTextBox ID="NumericTextBox1" runat="server"  NumberOfFraction="3" NumberOfInteger="2" Text='<%# Eval("CategoryId") %>'  AllowNegative="true"  Type="Decimal" ></ccl:NumericTextBox>
                </ItemTemplate>
                </asp:TemplateField>
                <asp:BoundField DataField="CategoryId" HeaderText="CategoryId" 
                    SortExpression="CategoryId" />
            </Columns>
        </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
            ConnectionString="<%$ ConnectionStrings:test_EmployeeInfo_SKConnectionString %>" 
            SelectCommand="SELECT * FROM [Images]"></asp:SqlDataSource>
            <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        
        </ContentTemplate>
        <Triggers >
       <asp:PostBackTrigger ControlID="Button1" />
          </Triggers>
        </asp:UpdatePanel>
        
    
        </form>
    </body>
    </html>
    

     

     protected void Button1_Click(object sender, EventArgs e)
        {
            this.GridView1.DataSource=this.SqlDataSource1;
    
            this.GridView1.DataBind();
        }

    Microsoft Online Community Support
    2010年4月7日 1:35
  • 我的

    <asp:Content ID="Content1" ContentPlaceHolderID="conttest" runat="Server">
        <div style="height: 248px">
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"  >  

        <ContentTemplate>
                    <div style="height: 211px">
                        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="rowtext" >
                            <Columns>
                                <asp:TemplateField HeaderText="id" SortExpression="id">
                                    <ItemTemplate>
                                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
                                        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                                         <cc1:NumericTextBox ID="txt_ratebox"  NumberOfFraction="2" NumberOfInteger="2"   AllowNegative="true"  Type="Decimal" runat="server" Width="70px" Text='<%# Eval("id") %>' ></cc1:NumericTextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:BoundField DataField="rate" HeaderText="rate" SortExpression="rate" />
                            </Columns>
                        </asp:GridView>
                        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
                    </div>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="Button1" />
                </Triggers>
            </asp:UpdatePanel>
        </div>
    </asp:Content>

     

     

    CS文件和还是我最上面贴的那个,还是在那个控件里按了键盘就报找不到可执行源码的错误,察看源文件也还是看不到gird和他里面的控件,不知道怎么回事,再不行就把那个js扒出来挂在普通的textbox上算了

    2010年4月7日 3:19
  • 我的

    <asp:Content ID="Content1" ContentPlaceHolderID="conttest" runat="Server">
        <div style="height: 248px">
            <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"  >  

        <ContentTemplate>
                    <div style="height: 211px">
                        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="rowtext" >
                            <Columns>
                                <asp:TemplateField HeaderText="id" SortExpression="id">
                                    <ItemTemplate>
                                        <asp:Label ID="Label1" runat="server" Text='<%# Bind("id") %>'></asp:Label>
                                        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                                         <cc1:NumericTextBox ID="txt_ratebox"  NumberOfFraction="2" NumberOfInteger="2"   AllowNegative="true"  Type="Decimal" runat="server" Width="70px" Text='<%# Eval("id") %>' ></cc1:NumericTextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:BoundField DataField="rate" HeaderText="rate" SortExpression="rate" />
                            </Columns>
                        </asp:GridView>
                        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
                    </div>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="Button1" />
                </Triggers>
            </asp:UpdatePanel>
        </div>
    </asp:Content>

     

     

    CS文件和还是我最上面贴的那个,还是在那个控件里按了键盘就报找不到可执行源码的错误,察看源文件也还是看不到gird和他里面的控件,不知道怎么回事,再不行就把那个js扒出来挂在普通的textbox上算了

    2010年4月7日 3:19
  • 你好,

    我上面不是说了吗,要设置成同步刷新,而不是异步的。我上面贴的代码中把同步的这个注释掉了,而用的异步的是做的测试。

    应该是下面这个:

     <asp:PostBackTrigger ControlID="Button1" />

     


    Microsoft Online Community Support
    2010年4月8日 7:10