惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 夜飞

滚动DATAGRID数据 和股票一样滚动 vs.2005 中对COOKIES 加密解密 例子 - 夜飞 asp.net(c#) datelist DataGrid 中截取字符串加"..." 和 鼠标放上去字符全部显示 - 夜飞 vs.2005 比较时间大小 可精确到秒 - 夜飞 VS.2005 子窗体提交数据刷新父窗体 GRIDVIEW 子窗体(2) VS.2005 子窗体提交数据刷新父窗体 GRIDVIEW 父窗体(1) - 夜飞 gridview中加弹出窗口用例 创建数据库连接对象 ASP.NET程序员笔试最常见问题 海量数据库的查询优化及分页算法方案 - 夜飞 实现无刷新DropdownList联动效果 实现的不让同一个用户登陆 GridView控件修改、删除示例(修改含有DropDownList控件) asp.net打印 Web打印控制技术的几种方案: ASP.NET中弹出窗口技术 在asp.net中读取XML文件信息的4种方法 Asp.Net 动态生成验证码 ----- 把DataGrid1的一列的统计显示在页脚
表格列头加菜单(datagrid)
夜飞 · 2006-07-12 · via 博客园 - 夜飞
 

Introduction

This article shows how to add a JavaScript tree menu to the DataGrid head text, as well as dynamically change the header text, which my clients require to change the date formats and dynamically change the column header text.

This demo program demonstrates these ideas.

Implementation

To demonstrate this idea, I put the following piece of code in a .aspx page:

<asp:datagrid>

 <Columns id="DataGrid1" CellPadding="2" BorderColor="#CC9966"

              style="Z-INDEX: 101; LEFT: 100px; POSITION: absolute; TOP: 47px"

              EnableViewState="False" runat="server"

              AutoGenerateColumns="False">

    <asp:BoundColumn HeaderText="Last Name" DataField="LastName"

              ItemStyle-Width="150px" ></asp:BoundColumn>

    <asp:BoundColumn HeaderText="First Name" DataField="FirstName"

              ItemStyle-Width="150px" ></asp:BoundColumn>

    <asp:BoundColumn HeaderText="_Date" DataField="Date"

              ItemStyle-Width="150px"></asp:BoundColumn>

 </Columns>

</asp:datagrid>

To add a tree menu to the DataGrid header text, I add an “onMouseOver” event to the head text JavaScript:

headtext = "<a href='#'" + " onMouseOver='HM_f_PopUp(\"elMenu1\",event)'"

          + " onclick='javascript:document.getElementById(\"{0}\").click();'>" +

          date + "</a>";

The SetHeaderText functions as follows:

private void SetHeadText()

{

    string headtext = "";

    //date from AppSettings["HeaderDate"]

    string date = ConfigurationSettings.AppSettings["HeaderDate"];

    if(date.Length > 0)

    {

        //Note add an "onMouseOver" event

        headtext = "<a href='#'" +

          " onMouseOver='HM_f_PopUp(\"elMenu1\",event)'" +

          " onclick='javascript:document." +

          "getElementById(\"{0}\").click();'>" +

          date + "</a>";

   }

    else

    {

        headtext = "<a href='#'" +

          " onMouseOver='HM_f_PopUp(\"elMenu1\",event)'" +

          " onclick='javascript:document.getElementById(\"{0}\")." +

          "click();'>Date</a>";

    }

    //Set Header Text

    this.DataGrid1.Columns[2].HeaderText = string.Format(headtext,2);

}

The tree menu "DateMenu" method functions as:

private void DateMenu(string strBrowser, string strScriptDir)

{

    StringBuilder sb = new StringBuilder();

    bool IsSecure;

    string strAddress = "";

    IsSecure = Request.IsSecureConnection;

    Uri MyUrl = Request.Url;

    string strUri = MyUrl.AbsoluteUri;

    string strScriptName = MyUrl.AbsoluteUri;

    if (IsSecure==true )

    {

        strAddress = MyUrl.AbsoluteUri.Replace("http", "https");

    }

    else

    {

        strAddress = MyUrl.AbsoluteUri;

    }

    string strHrefParam,strSortDate;

    string strGregorian1,strGregorian2,strGregorian3,strGregorian4;

    string strJulian;

    strHrefParam = "ChangeDateFormat=" + strChangeDateFormat;

    strSortDate   = strAddress + "?" + strHrefParam +

        "&DateFormat=" + strDateFormat;

    strGregorian1 = strAddress + "?" + strHrefParam +

        "&DateFormat=" + "mm/dd/yyyy" ;

    strGregorian2 =strAddress + "?" + strHrefParam +

        "&DateFormat=" + "dd/mm/yyyy";

    strGregorian3 = strAddress + "?" + strHrefParam +

        "&DateFormat=" + "mm/dd/yy";

    strGregorian4 = strAddress + "?" + strHrefParam +

        "&DateFormat=" + "dd/mm/yy";

    strJulian = strAddress + "?" + strHrefParam +

        "&DateFormat=" + "yyyy.ddd";

    sb.Append("<script language='JavaScript1.2'>" + "\n\r");   

    sb.Append("var varDate ='" + strSortDate + "'; " +"\n\r");

    sb.Append("var varGregorian1 ='" + strGregorian1 + "'; " + "\n\r");         

    sb.Append("var varGregorian2 ='" + strGregorian2 + "'; " + "\n\r");        

    sb.Append("var varGregorian3 ='" + strGregorian3 + "'; " + "\n\r");         

    sb.Append("var varGregorian4 ='" + strGregorian4 + "'; "+ "\n\r");        

    sb.Append("var varJulian ='" + strJulian + "'; " + "\n\r");   

    if(bCheckIE==true)

    {

        sb.Append ("HM_Array1 = [");

        sb.Append ("    [90],         ");

        sb.Append ("    ['Others', varDate, 1,0,0],");

        sb.Append ("    ['Format Date','',1,0,1] ");

        sb.Append ("    ];" + "\n\r");   

        sb.Append ("HM_Array1_2 = [");

        sb.Append ("    [],");

        sb.Append ("    ['MM/DD/YYYY', varGregorian1 ,1,0,0],");

        sb.Append ("    ['DD/MM/YYYY', varGregorian2 ,1,0,0],");

        sb.Append ("    ['MM/DD/YY', varGregorian3 ,1,0,0],");

        sb.Append ("    ['DD/MM/YY', varGregorian4 ,1,0,0],");

        sb.Append ("    ['YYYY.DDD', varJulian ,1,0,0] ");

        sb.Append ("    ] " + "\n\r");

    }                                                              

    else

    {

        sb.Append ("HM_Array1 = [");

        sb.Append ("    [90],         ");

        sb.Append ("    ['Sort Date', varDate, 1,0,0],");

        sb.Append ("    ['MM/DD/YYYY', varGregorian1 ,1,0,0],");

        sb.Append ("    ['DD/MM/YYYY', varGregorian2 ,1,0,0],");

        sb.Append ("    ['MM/DD/YY', varGregorian3 ,1,0,0],");

        sb.Append ("    ['DD/MM/YY', varGregorian4 ,1,0,0],");

        sb.Append ("    ['YYYY.DDD', varJulian ,1,0,0] ");

        sb.Append ("    ]" + "\n\r");

    }

    sb.Append ("HM_DOM = (document.getElementById) ? true : false;" + "\n\r");

    sb.Append ("HM_NS4 = (document.layers) ? true : false;" + "\n\r");

    sb.Append ("HM_IE = (document.all) ? true : false;" + "\n\r");

    sb.Append ("HM_IE4 = HM_IE && !HM_DOM;" + "\n\r");

    sb.Append ("HM_Mac = (navigator.appVersion.indexOf('Mac') != -1);" + "\n\r");

    sb.Append ("HM_IE4M = HM_IE4 && HM_Mac;" + "\n\r");

    sb.Append ("HM_IsMenu = (HM_DOM || HM_NS4 || (HM_IE4 && !HM_IE4M));" +

               "\n\r");

    sb.Append ("HM_BrowserString = HM_NS4 ? 'NS4'" +

               " : HM_DOM ? 'DOM' : 'IE4';" + "\n\r");

    sb.Append ("if(window.event + '' == 'undefined') event = null;" + "\n\r");

    sb.Append ("function HM_f_PopUp(){return false};" + "\n\r") ;

    sb.Append ("popUp = HM_f_PopUp;" + "\n\r");   

    sb.Append ("</script>" + "\n\r");

    sb.Append ("\n\r");

    sb.Append ("<script language='JavaScript' src='"+

               strScriptDir+

               "/web_menu.js'></script>" + "\n\r");

    sb.Append("<script language='JavaScript'" +

           " src='Script/web_scriptiens6.js'></script>" +

           "\n\r");

    Response.Write( sb.ToString());

}

I stored the default date format in the Web.config AppSettings["DateFormat"]. The use of key/value pair settings simply populates a hashtable that you can access with your application, which allows you to dynamically change your application settings. If the configuration data settings change, the application is automatically restarted and the new values are used. Of course, you can also use the XML file.

Note that, in the user interface, the header text is "_Date", however, at AppSettings, I set the header text as "Date". So the screen displays "Date" instead of "_Date".

Here is my appSettings:

<appSettings>

 <add key="ScriptDir" value="SCRIPT" />

 <add key="DateFormat" value="mm/dd/yyyy" />

 <add key="HeaderDate" value="Date" />

</appSettings>

The date format function "GetDateFormat" is as shown below:

private void GetDateFormat()

{

    //tempDate from AppSettings

    string tempDate = ConfigurationSettings.AppSettings["DateFormat"].ToLower();

    if(tempDate == "" || tempDate == null)

        tempDate = "mm/dd/yyyy";

    //strDateFormat from QueryString

    strDateFormat= Request.QueryString["DateFormat"];

    string [] arTempDateFormat = null;

    if(strDateFormat == null || strDateFormat == "")

        strDateFormat= tempDate;

    else if(strDateFormat.IndexOf(',') != -1)

    {

        arTempDateFormat = strDateFormat.Split(',');

        int len = arTempDateFormat.Length;

        for(int iDateFormat=0; iDateFormat<len; iDateFormat++)

        {

            strDateFormat = arTempDateFormat[len-1];

        }

    }

    //Display an error message when appSettings "DateFormat" key is invalid.

    if (strDateFormat != "mm/dd/yyyy" && strDateFormat != "dd/mm/yyyy" &&

        strDateFormat != "mm/dd/yyyy" && strDateFormat != "mm/dd/yy" &&

        strDateFormat != "dd/mm/yy" && strDateFormat != "yyyy.ddd")

    {

        strMsg = "";

        strMsg = "Date Format is incorrect:( " + strDateFormat + ")";

        strMsg = doErrorMsg(strMsg);

        Response.Write(strMsg);

    }

}

Next is binding the data. The SetHeadText() function must be called before calling the DataBind() function.

private void BindDataGid(ArrayList alData)

{

    this.SetHeadText();

    DataGrid1.DataSource = alData;

    DataGrid1.DataBind();

}

Conclusion

By using this example program, you can easily add a tree menu to the column header text, as well as dynamically change application settings via Web.config appSettings.

About Florence FZ Li

M.S.: Computer Science, B.S.: Physics, MCSD: .NET, MCSD: VS 6Florence currently works at Confident Software, Inc. Atlanta, U.S.A. Besides programming, during her spare time she enjoys opera.

Click here to view Florence FZ Li's online profile.