【问题标题】:No data is being display in the gridview网格视图中没有显示数据
【发布时间】:2018-04-07 11:27:11
【问题描述】:

我创建了一个表单并添加了一个网格视图,我正在尝试从 SQL Server 数据库中检索数据。当我运行我的代码时,gridview 中没有显示任何错误或数据。请帮忙。。

private void Form1_Load(object sender, EventArgs e)
{
    string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

    using (SqlConnection con = new SqlConnection(CS))
    {
        con.Open();
        SqlCommand cmd = new SqlCommand("Select * from tblProductInventory", con);
        dataGridView1.DataSource = cmd.ExecuteReader();            
    }  
}

【问题讨论】:

标签: c# sql winforms


【解决方案1】:

使用 DataAdapter 填充 DataTable。

 private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dataTable= new DataTable();
            string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;
            using (SqlConnection con = new SqlConnection(CS))
            {
              con.Open();
              SqlCommand cmd = new SqlCommand("Select * from tblProductInventory", con);               
              SqlDataAdapter adapter = new SqlDataAdapter(cmd);
              adapter.Fill(dataTable);                    
              dataGridView1.DataSource = dataTable;             
            }  
       }

【讨论】:

  • 我试过这个 dataGridView1.DataBind(); ...它显示错误说它确实存在
  • 我尝试了这段代码并在这一行出现错误:adapter.Fill(dataTable);无效操作异常
  • 我得到了 InvalidOperationException 未处理.. 并且正在选择此行 adapter.Fill(dataTable);
  • 非常感谢。这工作正常.. 你能分享我你在哪里学习这个 ado.net c# 窗口窗体。如果您可以分享,这将是很大的帮助
  • 互联网上有这么多博客。 msdn.microsoft.com/en-us/library/jj943772.aspx
【解决方案2】:
string CS = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString;

SqlConnection conn = new SqlConnection(CS);
    conn.Open();
    string query = "Select * from tblProductInventory";

    SqlCommand cmd = new SqlCommand(query, conn);

    DataTable t1 = new DataTable();
    using (SqlDataAdapter a = new SqlDataAdapter(cmd))
    {
        a.Fill(t1);
    }

    dataGridView1.DataSource = t1;

【讨论】:

    【解决方案3】:

    ExecuteReader 方法从给定的表(从数据库)中读取数据并为您构建一个DataReader

    您不能直接使用command.ExecuteReader 填充数据网格视图。您需要使用DataReaderDataTable

    数据表示例:

      DataTable dt = new DataTable()
      using (SqlDataAdapter ada = new SqlDataAdapter(cmd))
    {
        ada.Fill(t1);
    }
     MyDatagrid.Datasource = dt;
    

    现在我永远不会建议使用DataTable,因为它既费时又会妨碍性能。而是使用DataReader

    数据读取器示例:

    ''It is better to create a class to handle your data :)
    
      public class MyData
    {
        private int age;
    
        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        private string name;
    
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
    
        private int id;
    
        public int Id
        {
            get { return id; }
            set { id = value; }
           } 
        }
    
      ''Ever heard of ArrayList...It's amazing :)
    
      ArrayList myarray= new ArrayList();
    
      '''Now let's fix the main issue :)
    
      SqlDataReader reader = command.ExecuteReader();
      while (reader.Read())
      {
      MyData data = new MyData();
      data.Id = (int)reader[0];
      data.Name = reader[1].ToString();
      data.Age = (int)reader[2];
      myArray.Add(data);
      }
      myDataGrid.DataSource = sequence;
    

    【讨论】:

    • 如果你真的对性能转储 ArrayList 感兴趣,支持 List
    猜你喜欢
    • 1970-01-01
    • 2017-01-06
    • 2013-12-06
    • 2011-05-14
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多