[英]c# - DataGridView add row runtime error cell's model
我有一个DataGridView组件,用于向用户显示一些值。 它由5列组成:4个字符串和1个复选框。 这是我创建列并将其添加到conrtol中的代码:
// class variables
const int NUM_COLUMNS = 5;
DataGridViewColumn[] columns;
DataGridViewCheckBoxColumn checkColumn;
List <String> columnsHeaderName;
// init method
private void init_dataGridView()
{
// init all components
columnsHeaderName = new List<string>();
columns = new DataGridViewColumn[NUM_COLUMNS - 1]; // minus one becouse last one is a check box column
checkColumn = new DataGridViewCheckBoxColumn(); // last one
// columns descriptions
columnsHeaderName.Add("File path");
columnsHeaderName.Add("Sampling");
columnsHeaderName.Add("Start Date");
columnsHeaderName.Add("End Date");
columnsHeaderName.Add("Select");
for (int i = 0; i < NUM_COLUMNS - 1; i++)
{
// create, configure and add n-1 columns
columns[i] = new DataGridViewColumn();
columns[i].Name = Convert.ToString(i);
columns[i].HeaderText = columnsHeaderName[i];
columns[i].ReadOnly = true;
this.dataGridView1.Columns.Add(columns[i]);
}
// create, configure and add last column
checkColumn.Name = Convert.ToString(NUM_COLUMNS - 1);// (NUM_COLUMNS - 1).ToString();
checkColumn.HeaderText = columnsHeaderName[NUM_COLUMNS - 1];
checkColumn.Width = 50;
checkColumn.ReadOnly = false;
checkColumn.FillWeight = 10; //if the datagridview is resized (on form resize) the checkbox won't take up too much; value is relative to the other columns' fill values
this.dataGridView1.Columns.Add(checkColumn);
}
当我尝试向表中添加新行时出现问题
private void LoadFileButton_Click(object sender, EventArgs e)
{
string file = "";
DialogResult result = openFileDialog1.ShowDialog(); // Show the dialog.
if (result == DialogResult.OK) // Test result.
{
file = openFileDialog1.FileName;
Console.WriteLine(file);
dataGridView1.Rows.Add(new object[] { "value 1", "value 2", "value 3", "value 4", true });
}
}
对dataGridView1.Rows.Add()方法的调用引发了异常。 异常的描述是: “至少一列没有任何单元格的模型”
真的我不明白我在做什么错。 希望我的一些帮助。 提前致谢。
如果尝试运行以下代码,则无法添加DataGridViewColumn:
DataGridViewTextBoxColumn col = new DataGridViewTextBoxColumn();
col.Name = "xyz";
col.HeaderText = "XYZ";
col.ReadOnly = true;
this.dataGridView1.Columns.Add(col);
因为我们要添加DataGridViewTextBoxColumn而不是DataGridViewColumn,所以它将起作用
所以可能的解决方法是
for (int i = 0; i < NUM_COLUMNS - 1; i++)
{
// create, configure and add n-1 columns
columns[i] = new DataGridViewTextBoxColumn(); // or some other type that you want
columns[i].Name = Convert.ToString(i);
columns[i].HeaderText = columnsHeaderName[i];
columns[i].ReadOnly = true;
this.dataGridView1.Columns.Add(columns[i]);
}
尝试这个
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace stackkcw
{
public partial class Form1 : Form
{
public TcpClient client;
private DataGridView datgdStock;
private TextBox lablUpdates;
private TextBox lablTime;
private int countOfData;
DataTable dt = new DataTable();
public Form1()
{
InitializeComponent();
init_dataGridView();
}
const int NUM_COLUMNS = 5;
DataGridViewColumn[] columns;
DataGridViewCheckBoxColumn checkColumn;
List<String> columnsHeaderName;
// init method
private void init_dataGridView()
{
dt.Columns.Add("File path", typeof(string));
dt.Columns.Add("Sampling", typeof(decimal));
dt.Columns.Add("Start Date", typeof(DateTime));
dt.Columns.Add("End Date", typeof(DateTime));
dt.Columns.Add("Select", typeof(Boolean));
dt.Rows.Add(new object[] { "c:\\", 123.45, DateTime.Parse("1/1/2017"), DateTime.Parse("1/2/2017"), true });
dt.Rows.Add(new object[] { "c:\\", 123.46, DateTime.Parse("1/8/2017"), DateTime.Parse("1/9/2017"), false });
dt.Rows.Add(new object[] { "c:\\", 123.47, DateTime.Parse("1/15/2017"), DateTime.Parse("1/16/2017"), true });
dt.Rows.Add(new object[] { "c:\\", 123.48, DateTime.Parse("1/22/2017"), DateTime.Parse("1/23/2017"), false });
dt.Rows.Add(new object[] { "c:\\", 123.49, DateTime.Parse("1/29/2017"), DateTime.Parse("1/30/2017"), true });
dataGridView1.DataSource = dt;
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.