在winform中的dataGridDataGridTextBoxColumn cell = (DataGridTextBoxColumn)dgResult.TableStyles["TPerson"].GridColumnStyles[0];
private System.Windows.Forms.TextBox tcText;
tcText = new TextBox();
tcText.BorderStyle =System.Windows.Forms.BorderStyle.None;
tcText.Multiline = true;
tcText.Size = new System.Drawing.Size(136, 56);
tcText.Text = "textBox\n\r122211111111111222222222";
cell.Width= 500;
cell.TextBox.Controls.Add(tcText);这段代码可以设置某个单元格所在列的宽度,包括在这个单元格内我可以实现换行,颜色等操作
但是他的高度我无法设置。
请问怎么设置DataGrid的一行的高度?
谢谢!

解决方案 »

  1.   

    dataGrid1.PreferredRowHeight = value;
      

  2.   

    dgResult.TableStyles["TPerson"].PreferredRowHeigh=?
      

  3.   

    这是一段自适应高度的 datagrid 的代码:
    public void AutoSizeGrid() 
     

     
    // DataGrid should be bound to a DataTable for this part to 
     
    // work. 
     
    int numRows = ((DataTable)gridTasks.DataSource).Rows.Count; 
     
    Graphics g = Graphics.FromHwnd(gridTasks.Handle); 
     
    StringFormat sf = new StringFormat(StringFormat.GenericTypographic); 
     
    SizeF size; 
      
    // Since DataGridRows[] is not exposed directly by the DataGrid 
     
    // we use reflection to hack internally to it.. There is actually 
     
    // a method get_DataGridRows that returns the collection of rows 
     
    // that is what we are doing here, and casting it to a System.Array 
     
    MethodInfo mi = gridTasks.GetType().GetMethod("get_DataGridRows", 
     
    BindingFlags.FlattenHierarchy | BindingFlags.IgnoreCase | BindingFlags.Instance 
     
    | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static); 
      
    System.Array dgra = (System.Array)mi.Invoke(gridTasks,null); 
      
    // Convert this to an ArrayList, little bit easier to deal with 
     
    // that way, plus we can strip out the newrow row. 
     
    ArrayList DataGridRows = new ArrayList(); 
     
    foreach (object dgrr in dgra) 
     

     
    if (dgrr.ToString().EndsWith("DataGridRelationshipRow")==true) 
     
    DataGridRows.Add(dgrr); 
     

      
    // Now loop through all the rows in the grid 
     
    for (int i = 0; i < numRows; ++i) 
     

     
    // Here we are telling it that the column width is set to 
     
    // 400.. so size will contain the Height it needs to be. 
     
    size = g.MeasureString(gridTasks[i,1].ToString(),gridTasks.Font,400,sf); 
     
    int h = Convert.ToInt32(size.Height); 
     
    // Little extra cellpadding space 
     
    h = h + 8; 
      
    // Now we pick that row out of the DataGridRows[] Array 
     
    // that we have and set it's Height property to what we 
     
    // think it should be. 
     
    PropertyInfo pi = DataGridRows[i].GetType().GetProperty("Height"); 
     
    pi.SetValue(DataGridRows[i],h,null); 
      
    // I have read here that after you set the Height in this manner that you should 
     
    // Call the DataGrid Invalidate() method, but I haven't seen any prob with not calling it.. 
      

      
    g.Dispose();