我在datagridview上添加了n个列。列数不固定,列的名称也是固定的。另外,我想为每行中的所有列添加deault值
此外,这些列在运行时添加,gird的数据源也与类
相关联 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 :(得分: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:
但由于您可以拥有许多需要默认值的列,因此您可以处理 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";
}
答案 1 :(得分:1)
如果数据尚未绑定到DataSet,这将是我的方法。将数据绑定到表允许您在表本身上创建约束和其他规则,而不是弄乱网格控件。
此外,它还允许您在数据输入完成后轻松将数据导出到您想要的任何位置。您可以根据需要将数据传递到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;
}
答案 2 :(得分: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";
}
}
答案 3 :(得分:0)
创建从DataGridViewCell提供的新类。覆盖DefaultNewRowValue以返回所需的默认值(可以将其作为构造函数参数传递)。 将列集dgchkCol.CellTemplate创建为自定义DataGridViewCell实现的新实例后。
答案 4 :(得分: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";
}
答案 5 :(得分:0)
如果数据网格绑定到实体框架实体的集合,您可以在实体级别进行初始化。
您可以通过创建分部类并为实体声明构造函数来完成此操作。
e.g。如果我有一个实体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
}
}