C#:无法以编程方式填充DataGridView

时间:2011-03-30 12:45:50

标签: c# winforms sqlite datagridview

而不是使用设计器我试图填充DataGridView我已经以编程方式放置了我的Winform。当我查看调试器下的表时,它具有正确的列和行数。问题是网格在我的表单上显示为一个空的灰色框。当我通过VS 2008 Designer将网格绑定到数据库时,它工作正常。我该如何追踪问题?

更新

我几乎从这个MSDN Article

中取得了这个

更新

除了在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 个答案:

答案 0 :(得分:3)

我认为您需要指定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 :(

答案 1 :(得分:2)

基本上我不认为你应该复杂化这个!这是一个简单的方法:

        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

答案 2 :(得分:0)

我在使用sqlite时遇到了困难,并且还与linq绑定。现在我遇到与上面相同的问题,最终循环数据表以填充网格。

在使用数据表和数据绑定时,我注意到了sqlite的其他小问题,所以我猜问题就在于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++;
}