我把access数据表格中的内容显示到datagrid中,在datagide的列头上显示的是数据库的字段名,是英文的,我在datagrid中怎么才能把那个换成中文??我datagrid数据不是动态邦定的。我想在里面显示两个表的联结内容。但是,显示是可以,每次要点左上角那个小加号,然后再点table。才能显示。我想显示出的datagrid的单元格固定一个大小,怎么做。

解决方案 »

  1.   

    关于datagrid操作,我来接100分。
      

  2.   

    这个方法用好几种解决方式:
    把英文名换中文名,你可用Select  语名,给表中字段加别名,换掉!也可能自己定义DataTable 对角,并自己加DataColumn对象,在创建DataColumn对象给表中加上中文名!
      

  3.   

    设置datagridtablestyle的mappingname
      

  4.   

    给你个示例代码吧,里面还有编辑和删除两列:
    <asp:datagrid id=dgdBranch runat="server" Width="445px" DataSource="<%# BraTB %>" DataKeyField="branchid"     BorderWidth="1px" BackColor="#F7F7F7" BorderColor="#F7F7F7" CssClass="table" BorderStyle="Solid"  AutoGenerateColumns="False" Font-Size="X-Small">
    <SelectedItemStyle BackColor="Transparent"></SelectedItemStyle>
    <EditItemStyle ForeColor="Black" BackColor="Black"></EditItemStyle>
    <AlternatingItemStyle BorderColor="White" BackColor="White"></AlternatingItemStyle>
    <ItemStyle CssClass="textcenter" BackColor="#DEDFDE"></ItemStyle>
    <HeaderStyle CssClass="headcenter"></HeaderStyle>
    <FooterStyle CssClass="headcenter"></FooterStyle>
    <Columns>
    <asp:BoundColumn DataField="BranchName" HeaderText="机构名称"></asp:BoundColumn>
    <asp:BoundColumn DataField="SimpleCode" HeaderText="机构简称"></asp:BoundColumn>
    <asp:TemplateColumn HeaderText="更新机构信息">
    <ItemTemplate>
    <asp:LinkButton runat="server" Text="编辑" CommandName="Edit" CausesValidation="false"></asp:LinkButton>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:LinkButton runat="server" Text="更新" CommandName="Update" CausesValidation="false"></asp:LinkButton>&nbsp;
    <asp:LinkButton runat="server" Text="取消" CommandName="Cancel" CausesValidation="false"></asp:LinkButton>
    </EditItemTemplate>
    </asp:TemplateColumn>
    <asp:TemplateColumn HeaderText="删除" ItemStyle-Width="10%">
    <ItemTemplate>
    <asp:ImageButton CausesValidation="False" id="Imagebutton2" runat="server" ImageUrl="../img/delete.gif" CommandName="delete" AlternateText="删除此项机构"></asp:ImageButton>
    </ItemTemplate>
    </asp:TemplateColumn>
    </Columns>
    </asp:datagrid>
      

  5.   

    第二个问题你可能建立视图!
    解决,如果这个感觉不好,你用两个datagrid控件,一边放主表,一边放从表,点击主表,从表自动变化!
      

  6.   

    mappingname 一定要和赋值的table名称相同
      

  7.   

    说话还不如我代码来得快 private void pictureBox8_Click(object sender, System.EventArgs e)
    {
    DateTime dt1 = dateTimePicker1.Value;
                DateTime dt2 = dateTimePicker2.Value;
    int year1 = dt1.Year;
    int month1=dt1.Month;
    int year2 = dt2.Year;
    int month2=dt2.Month;
    // if (textBox1.Text.Trim().Length ==0)
    // {
    //            MessageBox.Show("请输入工资编号!","系统提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
    // return;
    // }
    DataView myDv;
    DataOper DataOper=new DataOper();
    //YCSD008ID是返回的一个DataTable
    YCSD008ID=DataOper.SP_GET_YCSD008_ID1(textBox1.Text.Trim(),month1.ToString(),month2.ToString(),year1.ToString(),year2.ToString(),"SP_GET_YCSD.SP_GET_YCSD008_ID1","YCSD008ID"); System.Windows .Forms .DataGridTableStyle tbstyle=new DataGridTableStyle ();
    tbstyle.MappingName="YCSD008ID";
    tbstyle.HeaderBackColor=Color.LemonChiffon;
    tbstyle.SelectionBackColor=Color.DodgerBlue;
    tbstyle.GridLineColor=Color.LightSkyBlue;
    MyColumn mc;
    DataGridColoredTextBoxColumn aColumnTextColumn ; aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="WAGEID";
    aColumnTextColumn.HeaderText="工资编号";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
                 
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="name";
    aColumnTextColumn.HeaderText="姓名";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
              
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="year";
    aColumnTextColumn.HeaderText="年份";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn);  aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="monthid";
    aColumnTextColumn.HeaderText="月份";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
               
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="watercount";
    aColumnTextColumn.HeaderText="用水量";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
               
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="waterrate";
    aColumnTextColumn.HeaderText="当月水费";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="eleccount";
    aColumnTextColumn.HeaderText="用电量";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
              
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="elecrate";
    aColumnTextColumn.HeaderText="当月电费";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
                 
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="ratetotal";
    aColumnTextColumn.HeaderText="当月总费用";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
                  
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="workunit";
    aColumnTextColumn.HeaderText="工作单位";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
                
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="creatroom";
    aColumnTextColumn.HeaderText="生成房号";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn);  mc=new MyColumn ();
    mc.MappingName="companytype";
    mc.HeaderText="公司类别";
    mc.NullText ="";
    mc.Width =80;
    mc.Alignment=HorizontalAlignment.Center;
    mc.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(mc); 
         
    aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="dittyname";
    aColumnTextColumn.HeaderText="小区名称";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 
      aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="ridgname";
    aColumnTextColumn.HeaderText="栋号";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn);  aColumnTextColumn=new DataGridColoredTextBoxColumn ();
    aColumnTextColumn.MappingName="roomid";
    aColumnTextColumn.HeaderText="房号";
    aColumnTextColumn.NullText ="";
    aColumnTextColumn.Width =120;
    aColumnTextColumn.Alignment=HorizontalAlignment.Center;
    aColumnTextColumn.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(aColumnTextColumn); 

    mc=new MyColumn ();
    mc.MappingName="homeformname";
    mc.HeaderText="房型名称";
    mc.NullText ="";
    mc.Width =80;
    mc.Alignment=HorizontalAlignment.Center;
    mc.ReadOnly=true;
    tbstyle.GridColumnStyles.Add(mc);  myDv=YCSD008ID.DefaultView;
    myDv.AllowNew= false;

    if(this.dataGrid3.TableStyles.Count==0)
    {
    this.dataGrid3 .TableStyles .Add (tbstyle);
    dataGrid3.DataSource=myDv;                 
    }
    else
    {
    dataGrid3.DataSource=myDv;
        
    }   }
      

  8.   

    后面这个是使DGRIG列和行变颜色的类
     #region 自定义模板列
    /// <summary>
    /// 自定义模板列
    /// </summary>
    public class MyColumn:System.Windows .Forms .DataGridTextBoxColumn 
    {
    /// <summary>
    /// MyColumn构造函数
    /// </summary>
    public MyColumn(){}

    protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight)
    {
    switch (this.GetColumnValueAtRow (source,rowNum).ToString ())
    {
    case "单间":
    backBrush=Brushes.OrangeRed ;break;
    case "一房一厅":
    backBrush=Brushes.LimeGreen;break;
    case "二房一厅":
    backBrush=Brushes.Blue;break;
    default:
    backBrush=backBrush;break;
    case "二房二厅":
    backBrush=Brushes.Orange;break;
    case "三房一厅":
    backBrush=Brushes.PaleGreen;break;
    case "三房二厅":
    backBrush=Brushes.SeaGreen;break;
    case "四房一厅":
    backBrush=Brushes.Yellow ;break;
    case "四房两厅":
    backBrush=Brushes.Tomato ;break;
    case "股司":
    backBrush=Brushes.LimeGreen ;break;
    case "配司":
    backBrush=Brushes.YellowGreen ;break;  
    case "物业":
    backBrush=Brushes.LightSeaGreen ;break;  
    case "营销":
    backBrush=Brushes.PaleVioletRed ;break;   
    case "集司":
    backBrush=Brushes.MediumSpringGreen  ;break;   
                    
    }

    base.Paint (g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
    }
    }
    public class DataGridColoredTextBoxColumn : DataGridTextBoxColumn
    {
    private int column; public DataGridColoredTextBoxColumn()
    {
    column = -2;
    } protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, bool alignToRight)
    {
    // the idea is to conditionally set the foreBrush and/or backbrush
    // depending upon some crireria on the cell value
    // Here, we color anything that begins with a letter higher than 'F'
    try
    {

    DataGrid grid = this.DataGridTableStyle.DataGrid; //first time set the column properly
    if (column == -2)
    {
    int i = this.DataGridTableStyle.GridColumnStyles.IndexOf(this);
    if (i > -1)
    column = i;
    } if(grid.CurrentRowIndex == rowNum && grid.CurrentCell.ColumnNumber == column)
    {
    backBrush = new LinearGradientBrush(bounds, Color.FromArgb(255, 200, 200), Color.FromArgb(128, 20, 20), LinearGradientMode.BackwardDiagonal);
    foreBrush = new SolidBrush(Color.White);
    }
    }
    catch(Exception ex){ /* empty catch */ }
    finally
    {
    // make sure the base class gets called to do the drawing with
    // the possibly changed brushes
    base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
    }
    } protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
    {
    //do nothing
    }
    }
           #endregion
    }
      

  9.   

    数据绑定是指定具体的表,就不会出现加号,
    http://blog.csdn.net/zhzuo/archive/2004/08/06/67016.aspx
    显示表头文字为中文,可以自己指定,
    比如修改第一列
    this.dataGrid1.TableStyles[0].GridColumnStyles[0].HeaderText = "新的列头";
    更多看,
    http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx
      

  10.   

    哈,这么简单的问题费了这么多尽!请问你知不知道用.net呀?
      

  11.   

    网格的宽度和列名显示中文,你只需要在  tablestyle 里设置就行了,多看下MSDN 就知道了
      

  12.   

    在datagrid的属性生成器里设计是做合理的最佳做法,具体如果想限制单元格长度只有依靠模板列的label控件手动设置了,2003淘汰了,2005根本不存在这种问题,操作也简单--------------------------------------------------------------
    成都理工学生求兼职
    MSN:[email protected]
    QQ技术群4329478
      

  13.   

    上面的都很麻烦其实VS2003里对DataGrid已经非常的完善了你可以直接把DataGrid服务器控件拉到你想要放到的地方然后打开DataGrid属性框,慢慢设置它的属性,以及你想要使它显示的样式,慢慢去做,很简单的。
      

  14.   

    zhzuo(秋枫) 对我帮助最大
    xd279545692(我爱C#.NET编程) 批评的是