在.net05下想把gridview和下面的表连接起来,用到了下面的代码
<script language="javascript" defer="defer">
        function MergeTable(source,dest)
    {
        var row;
        var cell;
        var sourceTb = document.all(source);
        var destTb = document.all(dest);
        for (var i=0; i<sourceTb.rows.length; i++)
        {
             row = document.createElement("TR");
            for (var j=0; j<sourceTb.rows(i).cells.length; j++)
            {
                cell = document.createElement("TD");
                row.appendChild(cell);
                //复制对象
                for(k=0;k<sourceTb.rows(i).cells(j).all.length;k++)
                    cell.appendChild(sourceTb.rows(i).cells(j).all.item(k));
            }
            destTb.tBodies(0).appendChild(row);
        }
        for (var i=sourceTb.rows.length-1; i>=0; i--)
        {
            sourceTb.deleteRow(i)
        }
    }    function ChangeTableLayout()
    {
        if(document.all('tbHeader') == null)
            MergeTable('tbForm','GridView1');
        else
            MergeTable('tbForm','tbHeader');
    }    ChangeTableLayout();
   </script>
可是运行后下面的表却显示不出来,页面下面有个感叹号显示页面有错误
双击下面的感叹号,详细信息,说null为空或不是对象。
不知道该怎么改,请大家帮帮忙,比较急,谢谢了!!!!

解决方案 »

  1.   

    ChangeTableLayout函数换成:
    function ChangeTableLayout()
        {
            if(document.all('tbHeader') == null){
             if(document.all('tbForm') != null&&document.all('GridView1') != null)
                MergeTable('tbForm','GridView1');
                else
                 alert("tbForm或GridView1不存在!");
            }else{
             if(document.all('tbForm') != null)
                MergeTable('tbForm','tbHeader');
                else
                alert("tbForm不存在!");
            }
        }
    运行下看看报什么错
      

  2.   

    下面的表能看到了,会弹出对话框为tbForm或gridview1不存在
      

  3.   

    为什么会不存在呢?为什么以前的表会看不到,而现在执行的是else里面,表却能看到了呢?
    还是有点迷惑阿
      

  4.   

    将ChangeTableLayout();去掉,放到
    <body onload="ChangeTableLayout()">中
      

  5.   

    <script language="javascript" defer="defer">
            function MergeTable(source,dest)
        {
            var row;
            var cell;
            var sourceTb = document.all(source);
            var destTb = document.all(dest);
            for (var i=0; i<sourceTb.rows.length; i++)
            {
                 row = document.createElement("TR");
                for (var j=0; j<sourceTb.rows(i).cells.length; j++)
                {
                    cell = document.createElement("TD");
                    row.appendChild(cell);
                    //复制对象
                    for(k=0;k<sourceTb.rows(i).cells(j).all.length;k++)
                        cell.appendChild(sourceTb.rows(i).cells(j).all.item(k));
                }
                destTb.tBodies(0).appendChild(row);
            }
            for (var i=sourceTb.rows.length-1; i>=0; i--)
            {
                sourceTb.deleteRow(i)
            }
        }    function ChangeTableLayout()
        {
            if(document.all('tbHeader') == null)
                MergeTable('tbForm','GridView1');
            else
                MergeTable('tbForm','tbHeader');
        }
       </script>
    <body onload="ChangeTableLayout()">
    中间上你的代码
    </body>
      

  6.   

    因为我这页用的母版,所以我加到div那里了,应该没问题吧,反正gridview,table都是在他里面的
    <%@ Page Language="C#" MasterPageFile="~/Sale2/Input/MasterPage.master" AutoEventWireup="true" CodeFile="A1.aspx.cs" Inherits="Sale2_Input_A1" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <div style="text-align: center" onload="ChangeTableLayout()">
      

  7.   

    <%@ Page Language="C#" MasterPageFile="~/Sale2/Input/MasterPage.master" AutoEventWireup="true" CodeFile="A1.aspx.cs" Inherits="Sale2_Input_A1" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <div style="text-align: center" onload="ChangeTableLayout()">
            &nbsp;<asp:Label ID="Label1" runat="server" Font-Bold="True" Text="Label"></asp:Label>
            <asp:Label ID="Label2" runat="server" Font-Bold="True" Text="Label"></asp:Label>
            <strong>合同承接明细表测量</strong><br />
                    <br />
                    <asp:GridView ID="GridView1" runat="server" Font-Bold="False" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" AutoGenerateColumns="False" Width="531px" CellPadding="4" ForeColor="#333333" GridLines="None"
                     OnPageIndexChanging="GridView1_PageIndexChanging" OnRowCancelingEdit="GridView1_RowCancelingEdit" AllowPaging="True" DataKeyNames="Contract_Num">
                        <Columns>
                            <asp:BoundField DataField="Num" HeaderText="序号" />
                            <asp:BoundField DataField="Contract_Num" HeaderText="合同编号" />
                            <asp:BoundField DataField="Contract_Date" HeaderText="签订日期" />
                            <asp:BoundField DataField="Contract_Sum" HeaderText="合同金额" />
                            <asp:BoundField DataField="Contract_Person" HeaderText="经办人" />
                            <asp:BoundField DataField="Res" HeaderText="备注" />
                        </Columns>
                        <EmptyDataTemplate>
                            <table id="tbHeader" style="width: 497px; height: 23px">
                                <tr>
                                    <td style="width: 120px; height: 27px">
                                        序号</td>
                                    <td style="width: 181px; height: 27px">
                                        合同编号</td>
                                    <td style="width: 212px; height: 27px">
                                        签订日期</td>
                                    <td style="width: 544px; height: 27px; text-align: center;">
                                        合同金额</td>
                                    <td style="width: 173px; height: 27px">
                                        经办人</td>
                                    <td style="width: 259px; height: 27px">
                                        备注</td>
                                    <td style="width: 212px; height: 27px">
                                    </td>
                                </tr>
                            </table>
                        </EmptyDataTemplate>
                        <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
                        <RowStyle BackColor="#E3EAEB" />
                            <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
                            <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
                            <HeaderStyle BackColor="#5BA5C8" Font-Bold="True" ForeColor="White" />
                            <EditRowStyle BackColor="#7C6F57" />
                            <AlternatingRowStyle BackColor="White" />
                    </asp:GridView>
            <br />
                    <table style="width: 413px" id="tbForm">
                        <tr>
                            <td style="width: 20px; height: 26px;">
                                <asp:TextBox ID="TextBox1" runat="server" Width="70px"></asp:TextBox></td>
                            <td style="width: 99px; height: 26px;">
                                <asp:TextBox ID="TextBox2" runat="server" Width="70px"></asp:TextBox></td>
                            <td style="width: 129px; height: 26px;">
                                <asp:TextBox ID="TextBox3" runat="server" Width="70px"></asp:TextBox></td>
                            <td style="width: 99px; height: 26px;">
                                <asp:TextBox ID="TextBox4" runat="server" Width="92px"></asp:TextBox></td>
                            <td style="width: 81px; height: 26px;">
                                <asp:TextBox ID="TextBox5" runat="server" Width="70px"></asp:TextBox></td>
                            <td style="width: 36px; height: 26px;">
                                <asp:TextBox ID="TextBox6" runat="server" Width="70px"></asp:TextBox></td>
                        </tr>
                        <tr>
                            <td style="width: 20px">
                            </td>
                            <td style="width: 99px">
                            </td>
                            <td style="width: 129px">
                            </td>
                            <td style="width: 99px">
                                <asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ControlToValidate="TextBox4"
                                    Display="Dynamic" ErrorMessage="请输入数字" Font-Size="10pt" ValidationExpression="^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$|^-?\d+$"
                                    Width="67px"></asp:RegularExpressionValidator></td>
                            <td style="width: 81px">
                            </td>
                            <td style="width: 36px">
                            </td>
                        </tr>
                    </table>
            <br />
            <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Font-Size="12pt">添加</asp:LinkButton><br />
            <br /><span style="font-size: 12pt">&nbsp; &nbsp;<a href="../measuredval.aspx">返回</a></span>
            &nbsp;</div>
         <script language="javascript">
            function MergeTable(source,dest)
        {
            var row;
            var cell;
            var sourceTb = document.all(source);
            var destTb = document.all(dest);
            for (var i=0; i<sourceTb.rows.length; i++)
            {
                 row = document.createElement("TR");
                for (var j=0; j<sourceTb.rows(i).cells.length; j++)
                {
                    cell = document.createElement("TD");
                    row.appendChild(cell);
                    //复制对象
                    for(k=0;k<sourceTb.rows(i).cells(j).all.length;k++)
                        cell.appendChild(sourceTb.rows(i).cells(j).all.item(k));
                }
                destTb.tBodies(0).appendChild(row);
            }
            for (var i=sourceTb.rows.length-1; i>=0; i--)
            {
                sourceTb.deleteRow(i)
            }
        }    function ChangeTableLayout()
        {
            if(document.all('tbHeader') == null)
                MergeTable('tbForm','GridView1');
            else
                MergeTable('tbForm','tbHeader');
        }
    //    function ChangeTableLayout()
    //    {
    //        if(document.all('tbHeader') == null){
    //         if(document.all('tbForm') != null&&document.all('GridView1') != null)
    //            MergeTable('tbForm','GridView1');
    //            else
    //             alert("tbForm或GridView1不存在!");
    //        }else{
    //         if(document.all('tbForm') != null)
    //            MergeTable('tbForm','tbHeader');
    //            else
    //            alert("tbForm不存在!");
    //        }
    //    }    ChangeTableLayout();
       </script>
       <script language="javascript">
    </asp:Content>
    谢谢你!
      

  8.   

    <div style="text-align: center" onload="ChangeTableLayout()">
    ......
    div没有onload属性呀这样吧,你把那些js放在页面的最下面看看
    是你原来的js,不用改变
    div中的onload去掉
      

  9.   

    div 我看了下好象有onload属性的
    把js放到</asp:Content>下面,然后原来的也不变。是这样吗?
      

  10.   

    哦,我刚才忘了把ChangeTableLayout();注释掉了
    现在好了,太感谢你啦。
    好人那!!!!!
      

  11.   

    可以确切地告诉你,div没有onload属性
      

  12.   

    不过似乎表和gridview还是没有连接上
      

  13.   

    报错了,说不能放到content外面
      

  14.   

    那js放在content里面,div中加上onload能解决你的问题吗?
      

  15.   

    不能,表能显示,但是表和gridview连不上,,每个列还是对不齐
      

  16.   

    就是按原来的,底下的表显示不出来。
    div中加上onload,表能显示了,就是还是连接不上
      

  17.   

    再试试<script for="window" event="onload" language="javascript">
    </script>
      

  18.   

    再不行的话,我投降了
    asp我不太懂,它的运行机制不太清楚一般在页面拿不到控件无非几种情况
    1.那个控件真的未定义
    2.在该控件加载前就执行了js语句你这中情况肯定属于第二种
      

  19.   

    得到gridview 要用 gridview.clientid
    gridview  在客户段 id 会变化