1.the trick is to create your own 页眉 table above the grid with the correct width, and set ShowHeader=false on your datagrid2. use 
<table width=400>
 <tr>
   <td width=100>表头</td><td width=100>表头</td><td width=100>表头</td><td width=100>.表头</td>
 </tr>
</table>
<div style="overflow:auto; height:400">
 <asp:DataGrid .../>
</div>

解决方案 »

  1.   

    可用javascrip来实现,在<div>里添加相应的页眉的内容,调好左右位置,在页面的onscroll事件中保持<div>的top始终为0
      

  2.   

    btw.你们那里是什么地方啊?
    去那工作是不是有什么好处? :D
    给我推荐一下吧.
      

  3.   

    "一定"要是拖动该框架集右边的滚动条时,数据网格控件整体往上移动,使我能看到datagrid内容的的表头,也就是页眉,而且照样能有排序的功能.
    "一定"要是拖动该框架集右边的滚动条时,数据网格控件整体往上移动,使我能看到datagrid内容的的表头,也就是页眉,而且照样能有排序的功能.
    "一定"要是拖动该框架集右边的滚动条时,数据网格控件整体往上移动,使我能看到datagrid内容的的表头,也就是页眉,而且照样能有排序的功能.
      

  4.   

    try the following, if you don't like to create multiple controls, you can always write a custom control to encapsulate them:
    <%@ Page Language="C#" %>
    <%@ import Namespace="System.Data" %>
    <%@ import Namespace="System.Data.SqlClient" %>
    <script runat="server">    void Page_Load(object o, EventArgs e)
             {
               if (!IsPostBack)
               {
                SqlDataAdapter da = new SqlDataAdapter("select * from authors",
                                  "server=localhost;database=pubs;uid=sa;pwd=;");            DataTable dt = new DataTable();
                da.Fill(dt);            DataGrid1.DataSource = dt.DefaultView;
                DataGrid1.DataBind();
              }
             }</script>
    <html>
    <head>
    </head>
    <body>
        <form id="form1" runat="server">
            <table width=600  cellspacing="0">
                <tr><td width=200  align="center">Employee ID</td><td width=200  align="center">Last Name</td><td width=200  align="center">First Name</td></tr>
            </table>
            <div style="overflow-y:auto;height:200">
            <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="false" ShowHeader=false ItemStyle-Width="600">
                <Columns>
                   <asp:BoundColumn HeaderText="Employee ID" DataField="au_id" ItemStyle-Width="200" />
                   <asp:BoundColumn HeaderText="Last Name" DataField="au_lname" ItemStyle-Width="200" />
                   <asp:BoundColumn HeaderText="First Name" DataField="au_fname" ItemStyle-Width="200" />
                </Columns>
            </asp:DataGrid>
            </div>
        </form></body>
    </html>
      

  5.   

    用最右边的滚动条也可以, 你就是设置一个层的绝对位置, 算好表格各列的宽度, 给它设个底色, 你的DataGrid向上滚动时, 那个表头层显示在最上层, 覆盖下面的各个DataGrid的值
      

  6.   

    >>>"一定"要是拖动该框架集右边的滚动条时don't be so stubborn, as long as it works, who cares how it is done, you can set div's height so that the right scrollbar on 该框架 never appears, so you always see one scrollbar>>>请能还能不能点击表头起到排序的功能?you have to add additional code to trigger those events
      

  7.   

    大哥,我也是迫不得己啊,可是上司说如果(翻页)一页数据太少,翻页耽误时间啊!
    所以我就设了一页显示30要记录,拖动滚动条就好一些啊.  所以我才说:>>>"一定"要是拖动该框架集右边的滚动条.
      

  8.   

    在上面作链接的Table的TD里面, 设置LinkButton, 实现它们的服务端事件分别是重新绑定DataGrid的数据源,  DataGrid1.DataSource = ...;
    DataGrid1.Sort = "某字段名";
    再DataBind();
      

  9.   

    生成的可排序DataGrid表头是这种格式:<tr>
    <td><a href="javascript:__doPostBack('DataGrid1:_ctl1:_ctl0','')">ID</a></td><td><a href="javascript:__doPostBack('DataGrid1:_ctl1:_ctl1','')">UnitName</a></td><td><a href="javascript:__doPostBack('DataGrid1:_ctl1:_ctl2','')">UnitID</a></td><td><a href="javascript:__doPostBack('DataGrid1:_ctl1:_ctl3','')">WOrder</a></td>
    </tr>
      

  10.   

    http://www.xicn.net/attach/2002-07-31/85415/6543.swf大家去看看我做的,给你们女朋友吧。
      

  11.   

    大家辛苦了。http://www.xicn.net/attach/2002-07-31/85415/6543.swf看看感人的故事,发生在我身边的故事。
      

  12.   

    http://www.xicn.net/attach/2002-07-31/85415/6543.swf载入时间比较长,稍等一下。
      

  13.   

    哇,又是新的一天.
    这个问题真是有点麻烦.
    我这出来个大致思路.功能嘛应该是基本实现.细节要处理的很多.:(
    如下:
    要求:页面布局是GridLayout.
    因为要计算这个DataGrid的坐标.
    使用FlowLayout流布局太难确定这个位置.(有好的提议也让告诉我.谢谢)
    很容易动态改变
    至少是这个DataGrid定义成绝对坐标style  position的absolute
    指定top 与 left加一个div 这里名字就叫fakeHeader<div id="fakeHeader" style="DISPLAY:none;Z-INDEX:10000"></div>
    <asp:DataGrid id="DataGrid1".......></asp:DataGrid>放到DataGrid上面就行了  设置 Z-INDEX 是为了让它能在DataGrid的上面在<body...里加上事件:
    onscroll="showFakeHeader('DataGrid1',document.all.fakeHeader);"
    onscroll是拖动滚动条时发生的下面就是showFakeHeader的js函数
    参数 :  
    dataGridName 是 这个DataGrid的ID 在客户端的时候会用这个名字去找Table
    objFakeHeader 就是要显示的那个divfunction showFakeHeader(dataGridName, objFakeHeader)
    {
      var objDataGrid = document.all.item(dataGridName);
      var objHeader = objDataGrid.rows(0);//这个rows(0)应该是DataGrid的Header
        //看了生成的HTML代码就这样想的
      var scrollTop = document.body.scrollTop + 1 - 1;
      var objTop = objDataGrid.style.pixelTop + 1 - 1;
        //比较一下滚动条是不是已拖到看不见DataGrid的Header.
        //(所以才要DataGrid的坐标定位)
        //是则显示自己的Header, 不是就把自己的Header隐藏
      if (objTop < scrollTop)
      {
        objFakeHeader.innerHTML = "<table border='0' cellspacing='0' cellpadding='4' rules='all' bordercolor='#CC9966' border='1' style='background-color:White;border-color:#CC9966;border-width:1px;width:326px;border-collapse:collapse;'>" + objHeader.outerHTML + "</table>";
          //div里面的内容.这个的好处是直接从客户端把Header的内容取出来
          //就是前面找到的那个rows(0) , 一个tr
          //这样就不用管Header上有没有排序之类的东西.直接复制全部HTML过来
          //前后我都手工加了<table></table>标签
          //属性也是手工写上去的.... :(
          //也可以想办法去把原来table的属性都取出来....不过实在是...太麻烦
          //要用js分析复杂的字串......有空再做吧
        objFakeHeader.style.position = "absolute";

        objFakeHeader.style.left = objDataGrid.style.left;

        objFakeHeader.style.top = document.body.scrollTop ;
        objFakeHeader.style.display = "block";
         //设置假header的位置并显示
      }
      else
      {
        objFakeHeader.style.display = "none";
        // 隐藏
      }
    }以上就是这样....想不到更好的办法了
    这个运行的时候.如果滚动条没有拉到Header.假的div是不会显示的
    主要还是样式问题,列头的内容完全没问题
    如果楼主的DataGrid样式是固定的话.我想可以写死它.
    就是"<table......." + objHeader.innerHTML + "</table>"这段
    基本功能就实现了.没有处理的太细.楼主自己看着办吧
    这个客户要求还真变态... @_@
    如果是楼主自己想做成这样....  拜托下次不要想出这些稀奇古怪的东西来
      

  14.   

    哦?那个flash是你做的?
    故事和flash以前都看过
    没想到今天遇上作者了.
    给签个名吧?
      

  15.   

    这位兄台说的好可以复制整个table的 innerHTML  加入 div
    以保证新table的显示样式与原table完全一样
    但是在div上设置  style="overflow:hidden;height:****px"
    关键就在于这个高度只留出header的高度,让它可显示.其他的看不见.
    :(
    要细细追究起来问题很多.做到完美不是那么容易
      

  16.   

    绿叶兄可真是好人、高人啊。幸亏还没有结贴,看来一定要在星期一结才行,反正
    放在此地也无所谓,可以看大家看看,看看还有没有高手光顾小弟的生意,这次可谓真是
    高手如yun啊?如果大家不介意我这“一颗星”的话,渴望做个朋友。
    姓名:李政  82年出生 现就职于一家日资企业  纯用asp.net(vb)+sqlserver2000+flash mx实现b/s结构。QQ:53486992 E_mail:[email protected] and [email protected]
      

  17.   

    在cs下常有一些可以置顶的网络控件,bs 里好象没有看到有这种,不过上面讲的都是一种方法。
      

  18.   

    各位高手,顺便问一下有谁能解决在网站打开时,在客户端状态栏下显示时间的左边显示我们公司或是我的头像如何做,似有的网站做到了。http://wyyl.xiloo.com/soye.htm
      

  19.   


    各位高手,顺便问一下有谁能解决在网站打开时,在客户端状态栏下显示时间的左边显示我们公司或是我的头像如何做,似有的网站做到了。http://wyyl.xiloo.com/soye.htm
      

  20.   


    各位高手,顺便问一下有谁能解决在网站打开时,在客户端状态栏下显示时间的左边显示我们公司或是我的头像如何做,似有的网站做到了。http://wyyl.xiloo.com/soye.htm
      

  21.   

    查看一下他的源代码就知道了:<script language="JavaScript">                                                                        
    <!-- Begin
     
    function scrollit_r2l(seed)
    { var m1  = "网页制作幽灵——http://wyyl.xiloo.com";
     var m2  = " " ;
           var msg=m1+m2;
           var out = " ";
           var c = 1;
     var speed  = 100
    if (seed > 100)
    {                seed-=2;
                    var cmd="scrollit_r2l(" + seed + ")";
                 timerTwo=window.setTimeout(cmd,speed);}
        else if (seed <= 100 && seed > 0)
         {                for (c=0 ; c < seed ; c++)
                          {       out+=" ";}
           out+=msg;         seed-=2;
       var cmd="scrollit_r2l(" + seed + ")";
       window.status=out;
     timerTwo=window.setTimeout(cmd,speed); }
          else if (seed <= 0)
    {                if (-seed < msg.length)
                      {
                           out+=msg.substring(-seed,msg.length);
                           seed-=2;
                           var cmd="scrollit_r2l(" + seed + ")";
                           window.status=out;
           timerTwo=window.setTimeout(cmd,speed);}
           else {               window.status=" ";
                     timerTwo=window.setTimeout("scrollit_r2l(100)",speed);
    }
    }
    }
    scrollit_r2l(100);
    //  End -->
    </script>
      

  22.   

    呵呵。那个是助手。
    <OBJECT id="assistant" classid=CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081F width="32" height="32">
    </OBJECT> 
    <script>
    var MerlinID;
    var MerlinACS;
    document.all.assistant.Connected = true;
    MerlinLoaded = LoadLocalAgent(MerlinID, MerlinACS);
    Merlin = assistant.Characters.Character(MerlinID);
    Merlin.Show();
    Merlin.Play("Surprised");
    Merlin.Play("Pleased");
    Merlin.Speak("*_^欢迎您来\" 网页制作幽灵网\"");
    Merlin.Play("GestureLeft");
    Merlin.Speak("这是我冰河的网址:http://wyyl.xiloo.com");
    Merlin.Play("GestureRight");
    Merlin.Speak("这是域名境像1:http://wyyl.cnnb.net");
    Merlin.Play("Surprised");
    Merlin.Play("GestureLeft");
    Merlin.Speak("这是域名镜像2:http://wyyling.126.com");
    Merlin.Play("GestureUp");
    Merlin.Play("GestureDown");
    Merlin.Play("Surprised");
    Merlin.Think("我爱你们!请我来逛逛,谢谢!*_^*_^*_^");
    function LoadLocalAgent(AssistantID, AssistantACS)
    {
        LoadReq = document.all.assistant.Characters.Load(AssistantID, AssistantACS);
        return(true);
    }
    </script> 
    他用的那个是大家都有的
    你想把你自己做进去吗? *_*
      

  23.   

    只不过使用了代理控件罢工了。在html中是一个activex。
    <object classid=XXXXXXXXXXXXXXXXXXXXXXXXXXXX></object>
    你可以让它Hide()
    不Show()出来
      

  24.   

    <HTML>
    <HEAD>
    <TITLE>邮件</TITLE>
    <OBJECT id="AgentControl" codeBase="#VERSION=2,0,0,0" height="0" width="0" classid="CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081F" VIEWASTEXT>
    </OBJECT>

    <SCRIPT language="JavaScript">
    <!--//
    // * Character Objects
    var Merlin;// * Variables
    var UsedChars;
    var MerlinID;
    var MerlinACS;
    var MerlinURL;
    var MerlinStates;
    var MerlinAnimations;
    var MerlinReq;
    var MerlinStatesReq;
    var MerlinAnimationsReq;
    var MerlinLoaded;
    var LoadReq;
    var HideReq;
    var MerlinLeftX, MerlinCenterX, MerlinRightX;
    var MerlinTopY, MerlinCenterY, MerlinBottomY;// * Initialize
    UsedChars = "Merlin";// * Merlin
    MerlinID = "Merlin";
    MerlinACS = "merlin.acs";
    //MerlinURL = "http://agent.microsoft.com/agent2/chars/merlin/merlin.acf";
    MerlinURL="#"
    MerlinStates = "Showing, Hiding, Speaking, Moving, Gesturing, Idling, Hearing, Listening";
    MerlinAnimations = "GestureLeft, Surprised";
    MerlinLoaded = false;
    Window_OnLoad();function Window_OnLoad() {
        // Purpose:  Runs automatically when page is loaded
    //目的:在页面打开时自动运行程序
        // * INSERT ANY NON-AGENT RELATED SCRIPTING HERE    AgentControl.Connected = true;    MerlinLoaded = LoadLocalAgent(MerlinID, MerlinACS);    if (MerlinLoaded) {
            SetCharObj();
        }
        CheckLoadStatus();
    }function LoadLocalAgent(CharID, CharACS) {
        // Purpose:  Attempts to load the specified character
        // Returns:  true if successful, false if not    AgentControl.RaiseRequestErrors = false;
        LoadReq = AgentControl.Characters.Load(CharID, CharACS);
        AgentControl.RaiseRequestErrors = true;    if (LoadReq.Status != 1) {
            return(true);
        }
        return(false);
    }function SetCharObj() {
        // Purpose:  Sets the character reference and TTS Language ID    Merlin = AgentControl.Characters.Character(MerlinID);
        Merlin.LanguageID = 0x409 ;
    }
      

  25.   

    <HTML>
    <HEAD>
    <TITLE>邮件</TITLE>
    <OBJECT id="AgentControl" codeBase="#VERSION=2,0,0,0" height="0" width="0" classid="CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081F" VIEWASTEXT>
    </OBJECT>

    <SCRIPT language="JavaScript">
    <!--//
    // * Character Objects
    var Merlin;// * Variables
    var UsedChars;
    var MerlinID;
    var MerlinACS;
    var MerlinURL;
    var MerlinStates;
    var MerlinAnimations;
    var MerlinReq;
    var MerlinStatesReq;
    var MerlinAnimationsReq;
    var MerlinLoaded;
    var LoadReq;
    var HideReq;
    var MerlinLeftX, MerlinCenterX, MerlinRightX;
    var MerlinTopY, MerlinCenterY, MerlinBottomY;// * Initialize
    UsedChars = "Merlin";// * Merlin
    MerlinID = "Merlin";
    MerlinACS = "merlin.acs";
    //MerlinURL = "http://agent.microsoft.com/agent2/chars/merlin/merlin.acf";
    MerlinURL="#"
    MerlinStates = "Showing, Hiding, Speaking, Moving, Gesturing, Idling, Hearing, Listening";
    MerlinAnimations = "GestureLeft, Surprised";
    MerlinLoaded = false;
    Window_OnLoad();function Window_OnLoad() {
        // Purpose:  Runs automatically when page is loaded
    //目的:在页面打开时自动运行程序
        // * INSERT ANY NON-AGENT RELATED SCRIPTING HERE    AgentControl.Connected = true;    MerlinLoaded = LoadLocalAgent(MerlinID, MerlinACS);    if (MerlinLoaded) {
            SetCharObj();
        }
        CheckLoadStatus();
    }function LoadLocalAgent(CharID, CharACS) {
        // Purpose:  Attempts to load the specified character
        // Returns:  true if successful, false if not    AgentControl.RaiseRequestErrors = false;
        LoadReq = AgentControl.Characters.Load(CharID, CharACS);
        AgentControl.RaiseRequestErrors = true;    if (LoadReq.Status != 1) {
            return(true);
        }
        return(false);
    }function SetCharObj() {
        // Purpose:  Sets the character reference and TTS Language ID    Merlin = AgentControl.Characters.Character(MerlinID);
        Merlin.LanguageID = 0x409 ;
    }
      

  26.   

    function CheckLoadStatus() {
        // Purpose:  Determines if required characters have been loaded.
        //           If not, issue request to load next character
        //           else run the AgentIntro routine    if (!MerlinLoaded) {
            window.status = "Loading " + MerlinID + " Character.  Please Wait...";
            MerlinReq = AgentControl.Characters.Load(MerlinID, MerlinURL);
            return(false);
        }    window.status = "";
        AgentIntro();
        return(true);
    }function LoadError() {
        var strMsg;
        window.status = "";
        strMsg = "Error Loading Character: " + MerlinID + "\n";
        strMsg = strMsg + "This Microsoft Agent Script requires the character(s):\n";
        strMsg = strMsg + UsedChars;
        alert(strMsg);
    }
    function GetScreenPositions() {
        var ScreenWidth = window.screen.width;
        var ScreenHeight = window.screen.height;    if ((ScreenWidth == 0) || (ScreenHeight == 0)) {
            ScreenWidth = 800;
            ScreenHeight = 600;
        }    MerlinCenterX = (parseInt(ScreenWidth / 2) - parseInt(Merlin.Width / 2));
        MerlinRightX = (ScreenWidth - Merlin.Width);
        MerlinCenterY = (parseInt(ScreenHeight / 2) - parseInt(Merlin.Height / 2));
        MerlinBottomY = (ScreenHeight - Merlin.Height);
    }function InitAgentCommands() {
        // Purpose:  Initialize the Commands menu    Merlin.Commands.RemoveAll();
        Merlin.Commands.Caption = "My Menu Name";
        Merlin.Commands.Add("ACO", "Advanced Character Options", "Advanced Character Options");
    }function AgentIntro() {
        GetScreenPositions();
        InitAgentCommands();
        Merlin.MoveTo(MerlinLeftX, MerlinTopY);
        Merlin.Show();
        Merlin.Speak("Hello greystar ");
        Merlin.Think("What do you want to know?");
        Merlin.Play("GestureLeft");
        Merlin.Speak("Help yourself to read!");
        Merlin.Play("Surprised");
    Merlin.MoveTo(MerlinRightX,MerlinBottomY);

        Merlin.Hide();
      }
    //-->
    </SCRIPT>
    <SCRIPT language="JavaScript" event="RequestComplete(RequestObject)" for="AgentControl">
    <!--//
        // Purpose:  Take action on completion or failure of requests{
        switch (RequestObject) {
        case MerlinReq :
            if (RequestObject.Status == 0) {
                SetCharObj();            if (MerlinStates != "") {
                    window.status = "Loading " + MerlinID + " States.  Please Wait...";
                    MerlinStatesReq = AgentControl.Characters(MerlinID).Get("State", MerlinStates, true);
                }
                else if (MerlinAnimations != "") {
                    window.status = "Loading " + MerlinID + " Animations.  Please Wait...";
                    MerlinAnimationsReq = AgentControl.Characters(MerlinID).Get("Animation", MerlinAnimations, true);
                }
                else {
                    MerlinLoaded = true;
                    CheckLoadStatus();
                }
            }
            else {
                LoadError();
            }
            break;
        case MerlinStatesReq :
            if (RequestObject.Status == 0) {
                if (MerlinAnimations != "") {
                    window.status = "Loading " + MerlinID + " Animations.  Please Wait...";
                    MerlinAnimationsReq = AgentControl.Characters(MerlinID).Get("Animation", MerlinAnimations, true);
                }
                else {
                    MerlinLoaded = true;
                    CheckLoadStatus();
                }
            }
            else
            {
                LoadError();
            }
            break;
        case MerlinAnimationsReq :
            if (RequestObject.Status == 0)
            {
                MerlinLoaded = true;
                CheckLoadStatus();
            }
            else
            {
                LoadError();
            }
            break;
        case HideReq :
            AgentControl.Characters.Unload(MerlinID);
            break;
        } // end switch
    }
    //-->
      

  27.   

    </SCRIPT>
    <SCRIPT language="JavaScript" event="Command(UserInput)" for="AgentControl">
    <!--//
        // Purpose:  Determine Command that was selected either by menu or voice
        //           and run the applicable Command Script
        var BadConfidence;
        BadConfidence = 10;    if (UserInput.Confidence <= -40)
        {
            // Bad Recognition
        }
        else if ((UserInput.Alt1Name != "") && (Math.abs(Math.abs(UserInput.Alt1Confidence) - Math.abs(UserInput.Confidence)) < BadConfidence))
        {
            // Bad Confidence - too close to another command
        }
        else if ((UserInput.Alt2Name != "") && (Math.abs(Math.abs(UserInput.Alt1Confidence) - Math.abs(UserInput.Confidence)) < BadConfidence))
        {
            // Bad Confidence - too close to another command
        }
        else
        {
            // High Confidence
            switch(UserInput.Name) {
            case "ACO" :
                AgentControl.PropertySheet.Visible = true;
                break;
            }    }
    //-->
    </SCRIPT>
    <SCRIPT language="JavaScript" event="Book(BookID)" for="AgentControl">
    <!--//
    //-->
    </SCRIPT>
    <SCRIPT language="JavaScript" event="Click(CharacterID, Button, Shift, X, Y)" for="AgentControl">
    <!--
        // Insert Click Event Code Here
    -->
    </SCRIPT>
    <SCRIPT language="JavaScript" event="DblClick(CharacterID, Button, Shift, X, Y)" for="AgentControl">
    <!--
        // Purpose:  Stop and Hide all characters on double-click    Merlin.StopAll();
        if (!Merlin.HasOtherClients) 
        {
            if (Merlin.Visible) {
    AgentIntro()
                     //HideReq = Merlin.Hide();
            }
            else {          AgentControl.Characters.Character.Unload(MerlinID);
            }
        }
    //-->
    </SCRIPT>
    <META http-equiv="Content-Type" content="text/html; charset=gb2312">
    <META content="MSHTML 6.00.2600.0" name="GENERATOR">
    </HEAD>
    <BODY style="BACKGROUND-COLOR: #ffffff" bgColor="#ffffff" leftMargin="0" background="cid:174255603@11122002-37DE" topMargin="0">
    </BODY>
    </HTML>
      

  28.   

    你把代码改一下就可以了。function Window_OnLoad() 改成在你删除数据后调用就可以了。你可以决定它出现的位置,说什么,做什么动作。
    代理控件支持语音的。