【问题标题】:Column named ID cannot be found. Parameter name: columnName找不到名为 ID 的列。参数名称:columnName
【发布时间】:2013-11-26 11:13:29
【问题描述】:

我有一个我更新和填充的数据网格视图。但是我在datagridview的列(ID)中搜索值(returnID)的部分说“找不到名为ID的列。 参数名称:columnName" 而且我似乎无法让它工作。如果有人有任何帮助,非常感谢。

代码:

   private void Application_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'registrationDataSet1.TestDB' table. You can move, or remove it, as needed.
        this.testDBTableAdapter.Fill(this.registrationDataSet1.TestDB);

        textBox1.Select();
    }

    private void DataTable_Connection(object returnName, string returnID)
    {
        String varID;
        Object varName;

        varID = textBox1.Text.Replace(@"L", "").ToString();
        varName = returnName;

        OleDbConnection OLEDB_Connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\\Registration.accdb");
        OleDbCommand updateCmd = new OleDbCommand();
        try
        {
            updateCmd.CommandText = "INSERT INTO TestDB ([Name], [ID]) VALUES (@NAME, @ID)";
            updateCmd.Parameters.AddWithValue("@Name", varName);
            updateCmd.Parameters.AddWithValue("@ID", varID);
            OLEDB_Connection.Open();
            updateCmd.Connection = OLEDB_Connection;
            updateCmd.ExecuteNonQuery();
            OLEDB_Connection.Close();
        }
        catch
        {
        }

        textBox1.Clear();

        int index = -1;

        DataGridViewRow row = DataGridView1.Rows
            .Cast<DataGridViewRow>()
            .Where(r => r.Cells["ID"].Value.ToString().Equals(returnID))
            .First();

        index = row.Index;

    }

    private void Register_Selection(object sender, KeyPressEventArgs e)
    {
        SqlConnection DBConnection = new SqlConnection("Data Source=DATABASE;Initial Catalog=imis;Integrated Security=True");
        SqlCommand cmd = new SqlCommand();
        String returnValue;
        Object returnName;
        Object returnID;
        string txtend = textBox1.Text;

        if (e.KeyChar == 'L')
        {
            e.Handled = true;
            DBConnection.Open();
        }

        if (DBConnection.State == ConnectionState.Open)
        {
            if (textBox1.Text.Length != 6) return;
            {
                cmd.CommandText = ("SELECT last_name +', '+ first_name from name where id =@Name");
                cmd.Parameters.Add(new SqlParameter("Name", textBox1.Text.Replace(@"L", "")));
                cmd.CommandType = CommandType.Text;
                cmd.Connection = DBConnection;
                returnValue = cmd.ExecuteScalar() + "\t " + textBox1.Text.Replace(@"L", "");
                returnName = cmd.ExecuteScalar();
                returnID = textBox1.Text.Replace(@"L", "");
                DBConnection.Close();

                DataTable_Connection(returnName, returnID.ToString());

                this.testDBTableAdapter.Fill(this.registrationDataSet1.TestDB);
            }
        }
    }

【问题讨论】:

  • 你能发布你的绑定代码吗?
  • 确保该行包含一个名称为 ID 的列
  • @James,我已经对其进行了编辑以显示我的整个代码。
  • @RyanGillooly 这就是问题所在,您正在 SQL Server 数据库中查询一个不存在的 ID 列。
  • @RyanGillooly 不,您正在创建一个全新的连接并直接查询数据库。如果您想搜索网格视图的内容,您需要通过 UI 组件执行此操作 - 参见 this answer 示例。

标签: c# datagridview oledb datagridviewcolumn


【解决方案1】:

我发现当我测试这个时...... MessageBox.Show(dataGridView1.Columns[0].Name);

消息框显示id列headertext为“idDataGridViewTextBoxColumn”

因此,我没有引用列名“ID”,而是使用“idDataGridViewTextBoxColumn”来引用它。它奏效了。

【讨论】:

    【解决方案2】:

    尝试给出列索引,例如0,而不是给出列名ID

    【讨论】:

    • 请在 cmets 中提供此类建议。
    • @RohanKandwal 这是错误的请不要建议
    • @AsteroidsWithWings 用“请尝试”来回答也是错误的吧?那么这些应该放在哪里呢?
    • 这很好。如果你不喜欢“请尝试”,你可以把它拿出来,但这与它无关@Rohan
    • @RohanKandwal 那个帖子是错误的。这不是一个“问题和建议”网站。 (奇怪的是,“添加评论”工具提示曾经直截了当地说。它至少说明了 cmets 的用途。)请不要鼓励这种行为。谢谢
    猜你喜欢
    • 2016-02-23
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多