C #: не может заполнить DataGridView программно - PullRequest
3 голосов
/ 30 марта 2011

Вместо того, чтобы использовать конструктор, я пытаюсь заполнить DataGridView, который я надел на Winform программно. Когда я смотрю в таблице под отладчиком, он имеет правильные столбцы и количество строк. Проблема в том, что сетка отображается в виде пустой серой рамки в моей форме. Когда я связывал сетку с базой данных через VS 2008 Designer, она работала нормально. Как я могу отследить проблему?

UPDATE

Я в значительной степени взял это из этой статьи MSDN

UPDATE

Должен ли я что-то делать в конструкторе, кроме добавления сетки в Winform?

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SQLite;
using System.Windows.Forms;

namespace CC
{
    public partial class Form1 : Form
    {

        private BindingSource bindingSource1 = new BindingSource();
        private SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter();

        public Form1()
        {
            InitializeComponent();
            dataGridView1 = new DataGridView();

            this.Load += new System.EventHandler(Form1_Load);
            this.Text = "Cars";
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            dataGridView1.DataSource = bindingSource1;
            GetData("select * from Cars");


        }

        private void GetData(string selectCommand)
        {
            string dbPath = "c:\\temp\\cars.db";

            try
            {

                var connectionString = "Data Source=" + dbPath + ";Version=3";

                dataAdapter = new SQLiteDataAdapter(selectCommand, connectionString);

                SQLiteCommandBuilder commandBuilder = new SQLiteCommandBuilder(dataAdapter);


                DataTable table = new DataTable();
                table.Locale = System.Globalization.CultureInfo.InvariantCulture;
                dataAdapter.Fill(table);
                bindingSource1.DataSource = table;

                // Resize the DataGridView columns to fit the newly loaded content.
                dataGridView1.AutoResizeColumns(
                    DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
            }
            catch (SqlException)
            {
                MessageBox.Show("To run this example, replace the value of the " +
                    "connectionString variable with a connection string that is " +
                    "valid for your system.");
            }
        }


    }
}

Ответы [ 3 ]

3 голосов
/ 30 марта 2011

Я думаю, вам нужно указать свойство DataMember. И я думаю, что вам не требуется привязывать исходный объект, напрямую вы можете привязать DataTable к элементу управления DataGridView.

Я прилагаю код, который помогает связать управление gridview с базой данных SQL Server, и он прекрасно работает для меня.

using(SqlDataAdapter sqlDataAdapter = 
    new SqlDataAdapter("SELECT * FROM Table1",
        "Server=.\\SQLEXPRESS; Integrated Security=SSPI; Database=SampleDb"))
{
    using (DataTable dataTable = new DataTable())
    {
        sqlDataAdapter.Fill(dataTable);
        this.dataGridView1.DataSource = dataTable;
    }
}

Извините, у меня не установлен SQLite: (

2 голосов
/ 30 марта 2011

в принципе, я не думаю, что ты должен усложнять это!вот простой способ:

        string cs = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=your db location;"; //connection string
        string sql = "SELECT * FROM table_name"; //sql statment to display all data
        OleDbConnection conn = new OleDbConnection(cs); //connectiion
        OleDbDataAdapter da = new OleDbDataAdapter(sql, conn); //data adapter object
        DataSet ds = new DataSet(); //dataset object to keep data in table
        conn.Open(); //open connection
        da.Fill(ds, "table_name"); // fill the dataset with table_name through data adapter
        conn.Close(); //close connection
        dataGridView1.DataSource = ds; //populate the datagridview with dataset
        dataGridView1.DataMember = "table_name"; // populate datagridview with table_name
0 голосов
/ 23 января 2012

У меня проблемы с sqlite, а также с linq.Теперь у меня та же проблема, что и выше, и я зациклился на таблице данных, чтобы заполнить сетку.

Я заметил другие незначительные проблемы с sqlite при использовании datatables и привязки данных, поэтому я предполагаю, что проблема заключается в sqlite.

Вот некоторый код, чтобы сэкономить время для всех.

int rowcount = 0;
foreach (DataRow row in dataTable.Rows)  
{
    dataGrid.Rows.Add();
    int column = 0;
    foreach (var item in row.ItemArray)
    {
        dataGrid.Rows[rowcount].Cells[column].Value = item;
        column++;
    }
    rowcount++;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...