我不希望我的datagridview自动生成列

时间:2015-03-05 10:17:42

标签: c# winforms datagridview

我有一个winform应用程序,它可以正常工作,但我想选择列名,所以我创建了新列。

当我立即打开应用程序时,我有空白的手动生成的列,然后是包含数据的自动生成的列。

所以我做了:

dataGridView1.AutoGenerateColumns = false;

(在Form1加载时)

然后:

List<Movimenti> source = dbo.RecuperaMovimenti(contoSelezionato);
dataGridView1.DataSource = source;

但是我收到了错误:

对象引用未设置为对象的实例。

我发布了一些可以帮助您找到问题的代码:

当我从列表框中选择一个项目时,我希望datagridview加载所选用户的数据:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    DboInfo dbo = new DboInfo();

    try
    {
        contoSelezionato = listBox1.SelectedItem.ToString();
    }
    catch
    {}

         lblConto.Text = contoSelezionato;
         lblConto.Visible = true;
         lblTotale.Text = totale;
         lblTotale.Visible = true;

        try
        {
            List<Movimenti> source = dbo.RecuperaMovimenti(contoSelezionato);
            dataGridView1.DataSource = source;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message.ToString());
        }
    }

获取数据的dbo方法:

public List<Movimenti> RecuperaMovimenti(string contoSelezionato)
{            
    List<Movimenti> risultato = new List<Movimenti>();

    SQLiteConnection m_dbConnection = new SQLiteConnection();
        try
        {
            m_dbConnection = OpenConnection();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message, ex);
        }

        SQLiteDataReader rdr;

        string sql = "SELECT id_movimento, data_movimento, descrizione_movimento, importo_movimento FROM movimenti WHERE nome_conto = '"+contoSelezionato+"'";
        SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);
        rdr = command.ExecuteReader();

        while (rdr.Read())
        {
            Movimenti MOV = new Movimenti();

            MOV.id = (Int64)rdr["id_movimento"];
            //MOV.nome_conto = (string)rdr["nome_conto"];
            MOV.data = (string)rdr["data_movimento"];
            MOV.descrizione = (string)rdr["descrizione_movimento"];
            MOV.importo = Convert.ToInt32(rdr["importo_movimento"]);

            risultato.Add(MOV);
        }

        rdr.Close();
        m_dbConnection.Close();

        return risultato;
    }

编辑:

enter image description here

那是一张照片。我的数据不会进入我的列,它只是创建自动生成的列

2 个答案:

答案 0 :(得分:0)

可能是,我认为这里存在错误:

contoSelezionato = listBox1.SelectedItem.ToString();

无法从listBox获取值。

或者在这里:

while (rdr.Read())
        {
            Movimenti MOV = new Movimenti();

            MOV.id = (Int64)rdr["id_movimento"];
            //MOV.nome_conto = (string)rdr["nome_conto"];
            MOV.data = (string)rdr["data_movimento"];
            MOV.descrizione = (string)rdr["descrizione_movimento"];
            MOV.importo = Convert.ToInt32(rdr["importo_movimento"]);

            risultato.Add(MOV);
        }

一个或多个项目不包含任何值。

答案 1 :(得分:0)

这个或改变

col.DataPropertyName = "ID"

通过

col.DataPropertyName = "id"

Movimenti班有&#34; id&#34;财产,不是&#34; ID&#34;