我有一个DataGridView,它使用一些文本字段来填充其行。我还为DataGridView添加了SelectionChange侦听器。当向DataSource添加一个新行时,侦听器上会出现问题:“索引超出范围错误”。下面是我用来填充ParamsObject列表的代码,ParamsObject有三个属性并由文本字段设置。如果用户在文本字段中输入值并单击按钮,则会在列表中添加新行。
DataTable dt = new DataTable();
dt.Columns.Add("name");
dt.Columns.Add("level");
dt.Columns.Add("summary");
List<ParamObject> param = GetParameters();
foreach (var info in param)
{
DataRow row = dt.NewRow();
row["name"] = info.Name;
row["level"] = info.Level;
row["summary"] = info.Summary;
dt.Rows.Add(row);
}
dataGrid.DataSource = dt;
dataGrid.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGrid.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
dataGrid.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
选择侦听器的第一行出现错误。
public void dataGridResult_SelectionChanged(object sender, EventArgs e)
{
var selectedRowsCount = _MainForm.dataGridResult.SelectedRows[0];
string name = Convert.ToString(selectedRowsCount.Cells[0].Value);
int lod = Convert.ToInt16(Convert.ToString(selectedRowsCount.Cells[1].Value));
}
答案 0 :(得分:1)
我添加了这行代码来检查每当行不为空时执行某些操作并且它可以正常工作。
void dataGridResult_SelectionChanged(object sender, EventArgs e)
{
if (_MainForm.dataGridResult.SelectedRows.Count > 0)
{
var selectedRowsCount = _MainForm.dataGridResult.SelectedRows[0];
string name = Convert.ToString(selectedRowsCount.Cells[0].Value);
}