2013-11-27 119 views
2

我正在添加n個datagridview上的列數。列數不固定,並且列的名稱也是固定的。此外,我想在每行的所有列添加deault值一樣 datgrid view在DataGridView中設置所有列運行時間的默認值

而且這些列在運行時和網格的數據源增加也與類關聯網格添加列

 DbDataEntities db = new DbDataEntities(); 


var MasterAttendanceTypesDetail = db.MasterAttendanceTypes.ToList(); 
      foreach (string AttendanceType in MasterAttendanceTypesDetail.Select(s => s.AttendanceTypeName).ToList()) 
      { 
       if (!dgv1.Columns.Contains(AttendanceType)) 
       { 
        DataGridViewColumn dgchkCol = new DataGridViewColumn(); 
        dgchkCol.Name = AttendanceType; 
        dgv1.Columns.Add(dgchkCol); 
       } 
      } 

號碼是取決於表中的條目數量是幾乎100.
因此我怎麼能設置每列的默認值。

+0

您是否將此網格數據綁定到實體? 如果是,您可能希望在實體級別實現默認值,而不是作爲接口特定的值。您可能會在GUI中添加屬於業務層的業務規則。 – Mick

+0

是的,我正在從實體做這..但我怎麼可以添加業務規則可以請你告訴我或提供一個鏈接yhis –

+0

我已經在下面添加了一個答案... – Mick

回答

1

您可以繼承的DataGridViewColumn和的DataGridViewCell和覆蓋DefaultNewRowValue財產。

public class ExtendedColumn : DataGridViewColumn 
{ 
    public ExtendedColumn() 
     : base(new ExtendedCell()) 
    { 
    } 
} 

public class ExtendedCell : DataGridViewTextBoxCell 
{ 
    public ExtendedCell() 
     : base() 
    { 
    } 

    public override object DefaultNewRowValue 
    { 
     get 
     { 
      return "aaa"; 
     } 
    } 
} 

而且用它在你的代碼是這樣的:

ExtendedColumn col = new ExtendedColumn(); 
col.Name = AttendanceType; 
dgv1.Columns.Add(col); 

這裏是MSDN的鏈接,演示如何使用DefaultNewRowValue的:

http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell.defaultnewrowvalue(v=vs.110).aspx

但因爲你可以有很多需要默認值的列,您可以處理DefaultValuesNeeded事件。

dataGridView1.DefaultValuesNeeded +=new DataGridViewRowEventHandler(dataGridView1_DefaultValuesNeeded); 

private void dataGridView1_DefaultValuesNeeded(object sender, 
System.Windows.Forms.DataGridViewRowEventArgs e) 
    { 
     e.Row.Cells[0].Value = "aaa"; 
     e.Row.Cells[1].Value = "bbb"; 
     e.Row.Cells[2].Value = "ccc"; 

    } 
0

手動添加列

 for (int i = 0; i <= 5; i++) 
     { 
      dataGridView1.Columns.Add("Column" + i, "Column"+i); 
     } 

手動添加行

dataGridView1.Rows.Add(10); 

手動添加值在DataGridView中

  for (int i = 0; i <= dataGridView1.Columns.Count - 1; i++) 
      { 
       for (int j = 0; j <= dataGridView1.Rows.Count - 1; j++) 
       { 
        dataGridView1.Rows[j].Cells[i].Value = "aaa"; 
       } 
      } 
+0

它需要大量的時間手動添加列和設置有價值是沒有任何方式,我直接做它 –

+0

我試試這個代碼工作正常 – SK2185

+0

但有大量的行 –

0

創建一個從的DataGridViewCell交付新類。重寫DefaultNewRowValue以返回所需的默認值(您可以將其作爲構造函數參數傳遞)。 將您的列設置dgchkCol.CellTemplate創建爲自定義DataGridViewCell實現的新實例後。

0

獲取GridView的計數,然後用迭代:

for (int i = 0; i <=DS.Tables[0].Rows.Count;; i++) 
{ 
row[i].Cell[0].FindControl("txtTextBox1").Value="aaa"; 
row[i].Cell[1].FindControl("txtTextBox2").Value="bbb"; 
row[i].Cell[2].FindControl("txtTextBox3").Value="ccc"; 
} 
1

這將是我的方法,如果數據尚未綁定到數據集。將數據綁定到表格允許您在表格本身上創建約束和其他規則,而不是混淆網格控件。

另外,一旦數據輸入完成,它可以讓您輕鬆地將數據導出到任何您想要的位置。不過,您可以將數據傳遞到GetTable函數。我只是將示例數據構建到二維數組中以供演示。

我強烈建議您考慮以編程方式向表中添加行。該控件旨在用於ADO.NET。

private void BuildDataGrid() { 
     //-------------------------------------------------- 
     // Create list of test column names and default 
     // values 
     //-------------------------------------------------- 
     string[,] columns = new string[50,2]; 

     for (int n = 0; n < 50; n++) { 
      columns[n, 0] = "column_" + n.ToString(); 
      columns[n, 1] = "def" + n.ToString(); 
     } 

     //-------------------------------------------------- 
     // Bind table to grid 
     //-------------------------------------------------- 
     m_dataGridView.DataSource = GetTable(columns); 
    } 

    /// <summary> 
    /// Create a table from the raw data. 
    /// </summary> 
    private DataTable GetTable(string[,] columns) { 

     DataTable table = new DataTable(); 

     for (int n = 0; n < columns.GetLength(0); n++) { 
      DataColumn column = new DataColumn(columns[n, 0], typeof(string)) { 
       DefaultValue = columns[n, 1] 
      }; 

      table.Columns.Add(column); 
     } 

     return table; 
    } 
+0

順便說一句。這是你如何添加行。 http://msdn.microsoft.com/en-us/library/z16c79x4(v=vs.110).aspx – drankin2112

0

如果datagrid綁定到實體框架實體的集合,您可以在實體級別進行初始化。

您可以通過創建一個部分類併爲該實體聲明一個構造函數來實現。

例如如果我有一個實體tblUser

partial class tblUser 
{ 
    public tblUser() 
    { 
     Surname = "Smith"; 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     TestEntities test = new TestEntities(); 
     var user = test.tblUsers.CreateObject(); 

     Console.WriteLine(user.Surname); 
     // Prints Smith 
    } 
} 
相關問題