Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列标题文本可以';由于索引超出范围而设置的t_C#_Sql_Datagridview - Fatal编程技术网

C# 列标题文本可以';由于索引超出范围而设置的t

C# 列标题文本可以';由于索引超出范围而设置的t,c#,sql,datagridview,C#,Sql,Datagridview,我有两个方法可以在点击按钮后运行,bgEqptRec()和receiveHeader()。bgEqptRec()包含设置列标题的receiveheader()。但无法设置,因为索引超出范围。我非常确定我使用的是SQL Server中正确的索引编号。代码如下: private void btnSearch_Click(object sender, EventArgs e) { bgEqptRec(); } private void bgEqptRec() {

我有两个方法可以在点击按钮后运行,
bgEqptRec()
receiveHeader()
bgEqptRec()
包含设置列标题的
receiveheader()
。但无法设置,因为索引超出范围。我非常确定我使用的是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给出的错误是“索引超出范围。必须是非负的并且小于集合的大小。”

希望问题是:在调用
receiveHeader()时
method网格的数据源要么为空,要么为小于11的几列,因为您使用的是
columns[10]
。因此,我建议您在为网格分配数据源后调用该方法。确保查询返回至少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();

您是否在此行中遇到错误:
gvSearch.Columns[0]
执行一个简单的测试,查看哪些列可用-在debug和watch gvSearch.Columns中,或者只是循环并打印每个columnn索引和字段名。。。