2014-10-09 18 views
2

我使用下面的方法來從SQL如何調整在DataGridView列在C#

填寫datagridview的
public bool _MFillGridView(string pQuery, ref DataGridView _pDgv) 
{ 
    using (DataTable dt = new DataTable()) 
    { 
     using (SqlConnection con = new SqlConnection(_CObjectsofClasses._obj_CConnectionString._MGetConnectionString())) 
     { 
      using (SqlCommand cmd = new SqlCommand(pQuery, con)) 
      { 
       using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
       { 
        da.Fill(dt); 
        _pDgv.DataSource = dt; 
        _pDgv.Cursor = System.Windows.Forms.Cursors.Default; 
       } 
      } 
     } 

     foreach (DataColumn DC in dt.Columns) 
     { 
      _pDgv.Columns[DC.ColumnName].SortMode = DataGridViewColumnSortMode.NotSortable; 

      if (DC.DataType == typeof(DateTime)) 
      { 
       _pDgv.Columns[DC.ColumnName].DefaultCellStyle = new DataGridViewCellStyle { Format = _pDateFormat }; 
       _pDgv.Columns[DC.ColumnName].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
      } 
      else if (DC.DataType == typeof(decimal)) 
      { 
       _pDgv.Columns[DC.ColumnName].DefaultCellStyle = new DataGridViewCellStyle { Format = _CObjectsofClasses._obj_CNumbricFunction._MFormatNo("0") }; 
      } 
     } 
    } 

    return true; 
} 

,在這裏我使用這樣的;

_MFillGridView("My SQL query here", ref MydatagridviewToFill); 

上面的代碼工作完美,但我面臨列寬問題。我想通過列索引和DataGridViewAutoSizeColumnMode和列寬調整大小像

coloumn[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
coloumn[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
coloumn[2].Width = 200; 

和未設置應設置爲AutoSizeMode = DataGridViewAutoSizeColumnMode.NotSet;

所有其他列,請建議我什麼我的代碼更改列。

+1

這是一個**列**(不是* coloumn *,因爲你繼續拼寫它) – 2014-10-09 16:34:18

回答

3

根據我對上述問題的理解,我相信這就是你想要的?

private void ResizeColumns(DataGridView gridview, int column, int width, DataGridViewAutoSizeColumnMode mode) 
{ 
    for (int i = 0; i < gridview.ColumnCount; i++) 
    { 
     if (i.Equals(column)) 
     { 
      gridview.Columns[i].AutoSizeMode = mode; 
      gridview.Columns[i].Width = width; 
     } 
     else 
     { 
      gridview.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
     } 
    } 
} 

更新

好還是不知道我知道你是什麼之後,但我認爲這可能爲你指明正確的方向

public bool _MFillGridView(string pQuery, ref DataGridView _pDgv, int columnIndex, int width) 
{ 
    using (var dt = new DataTable()) 
    { 
     // ... Code to retrieve data from Database ... 

     for (var i = 0; i < dt.Columns.Count; i++) 
     { 
      var column = dt.Columns[i]; 
      if (column.DataType == typeof (DateTime)) 
       _pDgv.Columns[column.ColumnName].DefaultCellStyle = new DataGridViewCellStyle {Format = _pDateFormat}; 
      else if (column.DataType == typeof (decimal)) 
       _pDgv.Columns[column.ColumnName].DefaultCellStyle = new DataGridViewCellStyle {Format = _CObjectsofClasses._obj_CNumbricFunction._MFormatNo("0")}; 

      // Do your DataGridView formatting here 
      if (_pDgv.Columns[column.ColumnName].Index.Equals(columnIndex)) // Check your Column index on the control 
      { 
       _pDgv.Columns[column.ColumnName].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 
      } 
      else 
      { 
       _pDgv.Columns[column.ColumnName].AutoSizeMode = DataGridViewAutoSizeColumnMode.None; 
       _pDgv.Columns[column.ColumnName].Width = width; 
      } 
     } 
    } 
    return true; 
} 
+0

你是對的,但這是隻有1列,W帽子ABT多個列...請參考我的問題,例如我使用3列,即列[0],列[1],列[2]。我想通過列表,寬度列表,AutoSizeMode列表 – 2014-10-14 12:16:11

+0

你是什麼意思「只有1列」?它是一個循環,所以所有的列將以某種方式處理。另一方面,如果你的意思是你只想要格式化一列特定的列,那麼我可以爲你更新方法 – 2014-10-14 18:27:27

+0

是的,先生我想在_MFillGridView方法中傳遞參數,你提供的循環應該在_MFillGridView中。我如何做到這一點,請更新您的答案。 – 2014-10-15 04:42:22

0

我解決了使用@Mo帕特爾我我的問題只是更改int列索引,int寬度列表columnIndex,列表寬度

相關問題