在DataGridView中设置所有列运行时的默认值

时间:2013-11-27 10:55:44

标签: c# .net datagridview

我在datagridview上添加了n个列。列数不固定,列的名称也是固定的。另外,我想为每行中的所有列添加deault值 datgrid view

此外,这些列在运行时添加,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 因此,我如何设置每列的默认值。

6 个答案:

答案 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:

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";

    }

答案 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
    }
}