【问题标题】:Out Of Range exception when initializing binded DataGridview初始化绑定的 DataGridview 时出现超出范围异常
【发布时间】:2014-01-22 20:36:10
【问题描述】:

我将 MS SQL Server 2012 中的表通过数据集绑定到列表框,该列表设置为我的 dataGridView 的数据源,现在,我不想争论这个解决方案的优点或缺点,但是当我初始化我的 dataGridView 时我得到 System.ArgumentOutOfRangeException。

有代码

public void initializeCarsGrid()
        {
             DataGridViewColumn column0 = carsGrid.Columns[0];
             column0.HeaderText = "Name";
             DataGridViewColumn column1 = carsGrid.Columns[1];
             column1.HeaderText = "Class";
             DataGridViewColumn column2 = carsGrid.Columns[2];
             column2.HeaderText = "Price / Day";
             DataGridViewColumn column3 = carsGrid.Columns[3];
             column3.HeaderText = "Capacity";
             DataGridViewColumn column4 = carsGrid.Columns[4];
             column4.HeaderText = "Registration number";
             DataGridViewColumn column5 = carsGrid.Columns[5];
             column5.HeaderText = "Description";

            carsGrid.Columns[0].DataPropertyName = "@Name";
            carsGrid.Columns[1].DataPropertyName = "@Class";
            carsGrid.Columns[2].DataPropertyName = "@PricePerDay";
            carsGrid.Columns[3].DataPropertyName = "@Capacity";
            carsGrid.Columns[4].DataPropertyName = "@RegistrationNumber";
            carsGrid.Columns[5].DataPropertyName = "@Description";

            selectCars();
        }

这是 pastebin 上的完整代码

http://pastebin.com/b7vBhDZs

【问题讨论】:

  • 你不见了Column[4]

标签: c# sql datagridview


【解决方案1】:

可能是这一行导致错误

carsGrid.Columns[6];

我认为carsGrid 中只有 6 列,但在这里您访问的是第 7 列值。您在上面设置标题文本的代码中也错过了它。

你可能想这样做。

DataGridViewColumn column4 = carsGrid.Columns[4];
column4.HeaderText = "Registration number";
DataGridViewColumn column5 = carsGrid.Columns[5];
column5.HeaderText = "Description";

【讨论】:

  • 抱歉,这个错误只是因为我在试图找出问题所在时使用了代码 - 但如果我改变你在这里的建议,那没有任何区别反正。但是您说过有关在 carsGrid 中具有列的内容-在此初始化之前我没有任何列-我是否必须将它们设置在此 Columns 集合中的其他地方?¨
  • @Mythago 好的 np,您能告诉我们您在哪一行遇到异常。
  • 看看我的编辑 - 我的异常出现在这里:DataGridViewColumn column0 = carsGrid.Columns[0];
  • 所以这意味着您的carsGrid 没有任何列。您如何为cardGrid 添加列?
  • 好吧,我认为这会添加我想要的所有列 - 但我只是在学习这个,它可能是错误的。能否请您简单介绍一下用于向 datagrid 添加列的解决方案?¨
【解决方案2】:

您可以使用数据集绑定网格。 您需要做的就是声明一个数据集获取数据集的值并将网格的数据源绑定到数据集 像这样的东西:

DataSet ds = new DataSet();
ds = SelectCars();
carsGrid.DataSource = ds;
carsGrid.DataMember = ds.Tables[0].TableName;

希望对你有帮助!

【讨论】:

  • 哇,这真的解决了问题——我通过绑定列表获取了这个数据源,但这做得更好。现在我必须弄清楚,如何在我的 datagridview 中只显示一些列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多