由于索引超出范围,无法设置列标题文本

Posted

技术标签:

【中文标题】由于索引超出范围,无法设置列标题文本【英文标题】:Column Header Text can't set due to index was out of range 【发布时间】:2017-05-20 18:29:58 【问题描述】:

我有两种方法可以在单击按钮后运行,bgEqptRec()receiveHeader()bgEqptRec() 包含设置列标题标题的recieveHeader()。但由于索引超出范围,无法设置。我很确定我使用了正确数量的 SQL Server 索引。代码如下:

private void btnSearch_Click(object sender, EventArgs e)

        bgEqptRec();


private void bgEqptRec()
        
            receiveHeader();
            gvSearch.DataSource = null;
            using (var connect = connection.getConnection())
            
                using (SqlCommand cmd = new SqlCommand("SELECT * FROM receive WHERE rec_stat='IN' AND rec_date BETWEEN '" + dtpFrom.Text + "' AND '" + dtpTo.Text + "'"))
                
                    cmd.Connection = connect;
                    cmd.CommandType = CommandType.Text;
                    using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                    
                        using (DataTable dt = new DataTable())
                        
                            da.Fill(dt);
                            gvSearch.DataSource = dt;
                        
                    
                
            
        

private void receiveHeader()
        
            gvSearch.Columns[0].HeaderText = "Supplier";
            gvSearch.Columns[1].HeaderText = "Invoice";
            gvSearch.Columns[2].HeaderText = "Brand";
            gvSearch.Columns[3].HeaderText = "Model";
            gvSearch.Columns[4].HeaderText = "Equipment";
            gvSearch.Columns[5].HeaderText = "Serial No.";
            gvSearch.Columns[6].HeaderText = "Price";
            gvSearch.Columns[7].HeaderText = "PO No.";
            gvSearch.Columns[8].HeaderText = "Release Date";
            gvSearch.Columns[9].HeaderText = "Release By";
            gvSearch.Columns[10].HeaderText = "Status";
        

VS 给出的错误是“索引超出范围。必须为非负数且小于集合的大小。”

【问题讨论】:

您是否收到此行中的错误:gvSearch.Columns[0] 做一个简单的测试,看看有哪些可用的列 - 在调试和观察 gvSearch.Columns 中,或者只是循环并打印每个列索引和字段名称... 【参考方案1】:

希望问题在于:在调用 receiveHeader(); 方法时,网格的 dataSource 为空或少于 11 的几列,因为您正在使用 Columns[10]。所以我建议你在为 Grid 分配 DataSource 之后调用该方法。确保查询返回至少 11 列。这意味着代码将是这样的:

using (var connect = connection.getConnection())

   using (SqlCommand cmd = new SqlCommand("SELECT * FROM receive WHERE rec_stat='IN' AND rec_date BETWEEN '" + dtpFrom.Text + "' AND '" + dtpTo.Text + "'"))
   
      // rest of code
      gvSearch.DataSource = dt;
    

// call the method here since the grid is populated

receiveHeader();

【讨论】:

以上是关于由于索引超出范围,无法设置列标题文本的主要内容,如果未能解决你的问题,请参考以下文章

Hive PARTITIONED BY,列表索引超出范围错误?

由于索引超出范围,uitableviewcell 滚动中的 uicollectionview 将崩溃

索引超出范围的 SwiftUI 问题

设置 UIPickerView 的默认值:超出范围的索引

数组索引超出范围

IndexError:列表索引超出范围。无法理解问题出在哪里?