2013-11-27 82 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 
    } 
} 
相关问题