DataGridTableStyle style=new DataGridTableStyle();
style.MappingName="BM_HY";
style.AlternatingBackColor=System.Drawing.Color.Bisque; DataGridColumnStyle id=new DataGridTextBoxColumn();
id.MappingName ="HYBM";
id.HeaderText = "行业编号";
id.Width = 100;
style.GridColumnStyles.Add(id); DataGridColumnStyle name=new DataGridTextBoxColumn();
name.MappingName="HYMC";
name.HeaderText="行业名称";
style.GridColumnStyles.Add(name);
return style;         this.dataGrid1.TableStyles.Clear();
this.dataGrid1.TableStyles.Add(style);

解决方案 »

  1.   

    對不起,可能我沒有講清楚!
      現在我為一個 DataGrid 設定了一個以上的TableStyle ,我怎樣的 runtime 時根據需要動態的選擇一個來套用?
      

  2.   

    给出一个代码示例:
    下面的代码使用FormatUI(control)来样式化页面中的指定形式的控件,由于我在系统中每一页均包含一个PageHead.ascx,我就将此函数放到此用户控件的Page_load中,如下:
    private void Page_Load(object sender, System.EventArgs e)
    {
    //……
    Func.FormatUI(this.Parent);
    }//FormatUI函数如下:
    public static void FormatUI(System.Web.UI.Control page)
    {
    for(int i=0;i<page.Controls.Count;i++){
    switch(page.Controls[i].GetType().ToString()){
    case "System.Web.UI.WebControls.TextBox":
    case "InfoSmart.ISWebControlLib.ISTextBox":
    System.Web.UI.WebControls.TextBox tb=(System.Web.UI.WebControls.TextBox)page.Controls[i];
    if(tb.TextMode==System.Web.UI.WebControls.TextBoxMode.SingleLine || tb.TextMode==System.Web.UI.WebControls.TextBoxMode.Password)
    tb.CssClass="txtSingle";
    else
    tb.CssClass="txtMulti";
    break;
    case "System.Web.UI.WebControls.DropDownList":
    case "InfoSmart.ISWebControlLib.ISDropDownList":
    ((System.Web.UI.WebControls.DropDownList)page.Controls[i]).CssClass="ddlStyle";
    break;
    case "System.Web.UI.WebControls.Button":
    case "InfoSmart.ISWebControlLib.ISButton":
    System.Web.UI.WebControls.Button btn=(System.Web.UI.WebControls.Button)page.Controls[i];
    string s=btn.Text;
    if(s==">")
    {
    btn.BorderStyle=System.Web.UI.WebControls.BorderStyle.None;
    btn.Text="";
    btn.Width=13;
    btn.Height=20;
    btn.CssClass="btnSel";
    }
    else
    {
    btn.BorderStyle=System.Web.UI.WebControls.BorderStyle.None;
    int k=InfoSmart.Common.StrLib.GetUnicodeLength(btn.Text.Trim(),true);
    if(k==1)
    {
    btn.Width=30;
    btn.CssClass="btn30";}
    if(k==2)
    {
    btn.Width=40;
    btn.CssClass="btn40";
    }
    else if(k<=4 && k>2)
    {
    btn.Width=70;
    btn.CssClass="btn70";}
    else if(k<=8 && k>4)
    {
    btn.Width=110;
    btn.CssClass="btn110";}
    else if(k<=12 && k>8)
    {
    btn.Width=160;
    btn.CssClass="btn160";}
    else if(k>12)
    {
    btn.Width=210;
    btn.CssClass="btn210";}
    }
    break;
    case "System.Web.UI.WebControls.DataGrid":
    FormatGrid((System.Web.UI.WebControls.DataGrid)page.Controls[i]);
    break;
    case "InfoSmart.ISWebControlLib.ISTitleLabel":
    InfoSmart.ISWebControlLib.ISTitleLabel lbl=(InfoSmart.ISWebControlLib.ISTitleLabel)page.Controls[i];
    lbl.CssClass="pTitle";
    break;
    }
    if(page.Controls[i].Controls.Count>0){
    FormatUI(page.Controls[i]);
    }
    }//End of For
    }//上述函数引用了一个FormatGrid函数,代码如下:
    public static void FormatGrid(System.Web.UI.WebControls.DataGrid grd)
    {
    grd.BackColor=Color.FromArgb(69,149,207);
    grd.ForeColor=Color.White;
    grd.BorderColor=Color.White;
    grd.CssClass="font9";
    grd.BorderStyle=System.Web.UI.WebControls.BorderStyle.None;
    foreach(System.Web.UI.WebControls.DataGridItem item in grd.Items)
    {
    if(item.ItemType.ToString()=="Item")
    {
    item.BackColor=Color.FromArgb(244,244,244);
    item.ForeColor=Color.FromArgb(20,54,80);
    }
    else if(item.ItemType.ToString()=="AlternatingItem"){
    item.BackColor=Color.FromArgb(213,232,245);
    item.ForeColor=Color.FromArgb(20,54,80);
    }
    }//End of foreach
    }//基本上,我使用这两个函数已经满足了我的要求,如果要更改所有DataGrid的演示,通过更改这两个函数,就可以实现。当然,如果将相关的CSS信息使用XML实现模板化,就最好了,不用修改程序