http://community.csdn.net/Expert/topic/2922/2922103.xml?temp=.8740808

解决方案 »

  1.   

    我最常用的方法就是把DataGrid 的Width 设为空
      

  2.   

    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);
    int iColHight = (int)(Graphics.MeasureString(dataRow.ItemArray[iCurrCol].ToString(), dataGrid.Font).Height );
                  iWidth = (int)System.Math.Max(iWidth, iColWidth);

                }
              }
              columnStyle.Width = iWidth + 4;
      
              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();
          }
        }
      

  3.   

    其中dataGrid 就是你的dataGrid,  nRowsToScan 你传入-1就可以了
      

  4.   

    将宽设为空或百分比。最好放到一个table中来控制datagrid的的居中.