怎么根据查询字段个数创建DataGrid的列
给个简化的模板看看吧
我不是要DataGrid的自动创建列,我想head自己设置中文名称
或者从数据库中取中文名称配对数据库查询列

解决方案 »

  1.   

    private void AddDataGridTableStyle()
    {
       // Create a new DataGridTableStyle and set MappingName.
       DataGridTableStyle myGridStyle = 
       new DataGridTableStyle();
       myGridStyle.MappingName = "Customers";   // Create two DataGridColumnStyle objects.
       DataGridColumnStyle colStyle1 =
       new DataGridTextBoxColumn();
       colStyle1.MappingName = "firstName";
       
       DataGridColumnStyle colStyle2 =
       new DataGridBoolColumn();
       colStyle2.MappingName = "Current";   // Add column styles to table style.
       myGridStyle.GridColumnStyles.Add(colStyle1);
       myGridStyle.GridColumnStyles.Add(colStyle2);      // Add the grid style to the GridStylesCollection.
       myDataGrid.TableStyles.Add(myGridStyle);
    }
    你当然可以把MappingName更换为中文名称
      

  2.   

    C#private void MakeTable(DataTable myTable){ 
       // Create a DataTable. DataTable myTable = new DataTable("myTable");
       // Create a DataColumn and set various properties. 
       DataColumn myColumn = new DataColumn(); 
       myColumn.DataType = System.Type.GetType("System.Decimal"); 
       myColumn.AllowDBNull = false; 
       myColumn.Caption = "Price"; 
       myColumn.ColumnName = "Price"; 
       myColumn.DefaultValue = 25; 
       // Add the column to the table. 
       myTable.Columns.Add(myColumn); 
       // Add 10 rows and set values. 
       DataRow myRow; 
       for(int i = 0; i < 10; i++){ 
          myRow = myTable.NewRow(); myRow["Price"] = i + 1; 
          // Be sure to add the new row to the DataRowCollection. 
          myTable.Rows.Add(myRow); 
       } 
    }
      

  3.   

    VB:Dim MyCol As BoundColumn
    MyCol = New BoundColumn
    MyCol.HeaderText = "text"
    MyCol.HeaderStyle.Width = Unit.Pixel(100)
    MyCol.DataField = "column"
    MyCol.ItemStyle.Width = Unit.Pixel(100)
    DataGrid1.Columns.Add(MyCol)
    C#:BoundColumn MyCol; 
    MyCol = new BoundColumn(); 
    MyCol.HeaderText = "text"; 
    MyCol.HeaderStyle.Width = Unit.Pixel(100); 
    MyCol.DataField = "column"; 
    MyCol.ItemStyle.Width = Unit.Pixel(100); 
    DataGrid1.Columns.Add(MyCol);
      

  4.   

    表现层控制我觉得不好,你还是动态生成一个DataTable吧,列名是中文,这样多方便
      

  5.   

    /// <summary>
    /// 清空GRID的COLUMN
    /// </summary>
    /// <param name="vardg"></param>
    private static void RefreshGrid(DataGrid vardg)
    {
    vardg.Columns.Clear();

    BoundColumn dc = new BoundColumn();
    dc.HeaderText = "ID";
    dc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    dc.DataField = "ID";
    dc.Visible = false;
    dc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
    vardg.Columns.AddAt(0,dc); dc = new BoundColumn();
    dc.HeaderText = "序号";
    dc.HeaderStyle.Wrap = false;
    dc.HeaderStyle.Width = 30;
    dc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    dc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
    vardg.Columns.AddAt(1,dc);
    } /// <summary>
    /// 创建按专家打印的GRID
    /// </summary>
    /// <param name="vardg"></param>
    private static void CreateExpertDataGrid(DataGrid vardg)
    {
    RefreshGrid(vardg); BoundColumn dc = new BoundColumn();
    dc.HeaderText = "专家姓名";
    dc.HeaderStyle.Wrap = false;
    dc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    dc.DataField = "EXPERT_NAME";
    dc.SortExpression = "EXPERT_NAME";
    dc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
    vardg.Columns.AddAt(2,dc);

    dc = new BoundColumn();
    dc.HeaderText = "所属医院";
    dc.HeaderStyle.Wrap = false;
    dc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    dc.DataField = "HOSPITAL";
    dc.SortExpression = "HOSPITAL";
    vardg.Columns.AddAt(3,dc);

    TemplateColumn  tc = new TemplateColumn();
    tc.ItemTemplate = new ColumnTemplate();
    tc.HeaderText = "打印";
    dc.HeaderStyle.Wrap = false;
    tc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    tc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
    tc.HeaderStyle.Width = 30;
    vardg.Columns.AddAt(4,tc);

    tc = new TemplateColumn();
    tc.ItemTemplate = new ColumnTemplateExport();
    tc.HeaderText = "导出";
    dc.HeaderStyle.Wrap = false;
    tc.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
    tc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
    tc.HeaderStyle.Width = 30;
    vardg.Columns.AddAt(5,tc);
    }
      

  6.   

    /// <summary>
    /// 实现ITemplate接口,用来打印
    /// </summary>
    public class ColumnTemplate : ITemplate
    {
    public void InstantiateIn(Control container)
    {
    LinkButton lb = new LinkButton();
    lb.Text = "打印";
    lb.CommandName = "Print";
    container.Controls.Add(lb);
    }
    } /// <summary>
    /// 实现ITemplate接口,用来导出
    /// </summary>
    public class ColumnTemplateExport : ITemplate
    {
    public void InstantiateIn(Control container)
    {
    LinkButton lb = new LinkButton();
    lb.Text = "导出";
    lb.CommandName = "Export";
    container.Controls.Add(lb);
    }
    }
      

  7.   

    创建模板列的时候要注意实现ITemplate接口
      

  8.   

    我的目的是想做一个列表页面类型的用户控件
    其中包含:
    1.快速搜索查询功能(查询列表中的结果)
    2.功能按钮(连接到其他页面)
    3.翻页控制,页码大小,跳转等
    用DataGrid我觉得可以用好的利用其中的功能
    如果用datatable,很多功能都要自己写了
    而且我的数据量也不是很大的那中这些都是题外话了,我另发帖了此帖问题解决,结帖
      

  9.   

    ShowResult.DataSource=dt;
    BoundColumn MyCol;
    for (int i=0;i<dt.Columns.Count;i++)
    {
                    MyCol=new BoundColumn();
                    MyCol.HeaderText=dt.Columns[i].Caption;
                    MyCol.DataField=dt.Columns[i].ColumnName;
                    ShowResult.Columns.Add(MyCol);
    }
    ShowResult.DataBind();
    问题解决
    asp:datagrid id="ShowResult" Width="100%" BackColor="White" Runat="server" CellPadding="4" BorderWidth="1px"
    BorderStyle="None" BorderColor="#3366CC" AutoGenerateColumns="false">
    AutoGenerateColumns="false"> 是 false 问题解决