WinCE下DataGrid设置自动宽度

试了很多DataGridTableStyle的方式,但好像通过SQL语句生成DataTable没有效果,千辛万苦,在国外网站codeguru发现解决方案

    public void SizeColumnsToContent(DataGrid dataGrid, int nRowsToScan) 
    {
      // Create graphics object for measuring widths.
      Graphics Graphics = dataGrid.CreateGraphics();
    
      // Define new table style.
      DataGridTableStyle tableStyle = new DataGridTableStyle();
    
      try
      {
        DataTable dataTable = (DataTable)dataGrid.DataSource;
      
        if (-1 == nRowsToScan)
        {
          nRowsToScan = dataTable.Rows.Count;
        }
        else
        {
          // Can only scan rows if they exist.
          nRowsToScan = System.Math.Min(nRowsToScan, dataTable.Rows.Count);
        }
              
        // Clear any existing table styles.
        dataGrid.TableStyles.Clear();
      
        // Use mapping name that is defined in the data source.
        tableStyle.MappingName = dataTable.TableName;
      
        // Now create the column styles within the table style.
        DataGridTextBoxColumn columnStyle;
        int iWidth;
      
        for (int iCurrCol = 0; iCurrCol < dataTable.Columns.Count; iCurrCol++)
        {
          DataColumn dataColumn = dataTable.Columns[iCurrCol];
        
          columnStyle = new DataGridTextBoxColumn();

          columnStyle.TextBox.Enabled = true;
          columnStyle.HeaderText = dataColumn.ColumnName;
          columnStyle.MappingName = dataColumn.ColumnName;
        
          // Set width to header text width.
          iWidth = (int)(Graphics.MeasureString(columnStyle.HeaderText, dataGrid.Font).Width);

          // Change width, if data width is wider than header text width.
          // Check the width of the data in the first X rows.
          DataRow dataRow;
          for (int iRow = 0; iRow < nRowsToScan; iRow++)
          {
            dataRow = dataTable.Rows[iRow];
          
            if (null != dataRow[dataColumn.ColumnName])
            {
              int iColWidth = (int)(Graphics.MeasureString(dataRow.ItemArray[iCurrCol].ToString(), dataGrid.Font).Width);
              iWidth = (int)System.Math.Max(iWidth, iColWidth);
            }
          }
          columnStyle.Width = iWidth + 4;
        
          // Add the new column style to the table style.
          tableStyle.GridColumnStyles.Add(columnStyle);
        }
        // Add the new table style to the data grid.
        dataGrid.TableStyles.Add(tableStyle);
      }
      catch(Exception e)
      {
        MessageBox.Show(e.Message);
      }
      finally
      {
        Graphics.Dispose();
      }
    }

通过调用如下代码使用

    private void button1_Click(object sender, System.EventArgs e)
    {
      SizeColumnsToContent(this.dataGrid1, -1);
    }

你可能感兴趣的:(WinCE下DataGrid设置自动宽度)