【问题标题】:The data isn't being loaded into datagrid view. What am i missing?数据未加载到数据网格视图中。我错过了什么?
【发布时间】:2013-08-23 22:36:54
【问题描述】:

我认为这是我查看代码的时候之一,这一切似乎都很好,因为我的眼睛认为它会是。我需要用全新的眼光来查看这段代码并告诉我它没有加载到第一个数据网格视图中的方式。感谢您提供的任何帮助。

private DataSet DataSetRentals { get; set; }

public DataRelationForm()
{
   InitializeComponent();
}    

private void DataRelationForm_Load(object sender, EventArgs e)
{
   DataSet relationship = new DataSet("relationship");

   /////
   SqlConnection conn = Database.GetConnection();

   SqlDataAdapter adapter = new SqlDataAdapter("Select * From Car", conn);
   DataSet DataSetRentals = new DataSet("Relationship");

   adapter.FillSchema(DataSetRentals, SchemaType.Source, "Car");
   adapter.Fill(DataSetRentals, "Car");

   adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
   adapter.Fill(DataSetRentals, "Car");

   DataTable Car;
   Car = DataSetRentals.Tables["Car"];

   foreach (DataRow drCurrent in Car.Rows)
   {
      Console.WriteLine("{0} {1}",
      drCurrent["au_fname"].ToString(),
      drCurrent["au_lname"].ToString());
   }

   ////////////////////////////////////
   SqlDataAdapter adapter2 = new SqlDataAdapter("Select * From CarRental", conn);

   adapter.FillSchema(DataSetRentals, SchemaType.Source, "Rentals");
   adapter.Fill(DataSetRentals, "Rentals");

   adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
   adapter.Fill(DataSetRentals, "Rentals");

   DataTable CarRental;
   CarRental = DataSetRentals.Tables["Rentals"];

   foreach (DataRow drCurrent in CarRental.Rows)
   {
      Console.WriteLine("{0} {1}",
      drCurrent["au_fname"].ToString(),
      drCurrent["au_lname"].ToString());
   }

   /////
   SqlDataAdapter adapter3 = new SqlDataAdapter("Select * From Customer", conn);

   adapter.FillSchema(DataSetRentals, SchemaType.Source, "Customer");
   adapter.Fill(DataSetRentals, "Customer");

   adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
   adapter.Fill(DataSetRentals, "Customer");

   DataTable Customer;
   Customer = DataSetRentals.Tables["Customer"];

   foreach (DataRow drCurrent in Customer.Rows)
   {
      Console.WriteLine("{0} {1}",
      drCurrent["au_fname"].ToString(),
      drCurrent["au_lname"].ToString());
   }

   ////////////////////////

   DataSetRentals.Tables.Add(Customer);
   DataSetRentals.Tables.Add(CarRental);
   DataSetRentals.Tables.Add(Car);

   DataRelation Step1 = new DataRelation("Customer2CarR",
   Customer.Columns["CustomerNo"], CarRental.Columns["CustomerNo"]);
   DataSetRentals.Relations.Add(Step1);

   DataRelation Step2 = new DataRelation("CarR2Car",
Car.Columns["CarID"], CarRental.Columns["CarID"]);
   DataSetRentals.Relations.Add(Step2);

   ////////////////////////
   CustomerGrid.DataSource= DataSetRentals.Tables["Customer"];
   CarRGrid.DataSource = DataSetRentals.Tables["CarRental"];
   CarGrid.DataSource = DataSetRentals.Tables["Car"];

   CustomerGrid.SelectionChanged += new EventHandler(Customer_SelectionChanged);
   CarRGrid.SelectionChanged += new EventHandler(CarR_SelectionChanged);
}

private void Customer_SelectionChanged(Object sender, EventArgs e)
{
   if (CustomerGrid.SelectedRows.Count > 0)
   {
      DataRowView selectedRow =
         (DataRowView)CustomerGrid.SelectedRows[0].DataBoundItem;
      DataSetRentals.Tables["CarRental"].DefaultView.RowFilter =
                "CustomerNo = " + selectedRow.Row["CustomerNo"].ToString();
        }

   else
   {

   }
}

private void CarR_SelectionChanged(Object sender, EventArgs e)
{
   if (CarRGrid.SelectedRows.Count > 0)
   {
      DataRowView selectedRow =
         (DataRowView)CarRGrid.SelectedRows[0].DataBoundItem;
      DataSetRentals.Tables["Car"].DefaultView.RowFilter =
         "CarID = " + selectedRow.Row["CarID"].ToString();
   }
}

这是Database.GetConnection() 方法的代码:

SqlConnectionStringBuilder stringBuilder = new SqlConnectionStringBuilder();
bool OnUni;

OnUni = (System.Environment.UserDomainName == "SOAC") ? true : false;

stringBuilder.DataSource = (OnUni) ? @"SOACSQLSERVER\SHOLESQLBSC" : "(local)";
stringBuilder.InitialCatalog = "CarRental_P117365";
stringBuilder.IntegratedSecurity = true;

return new SqlConnection(stringBuilder.ConnectionString);

【问题讨论】:

  • conn.Open() 是否在 Database.GetConnection() 方法中被调用?
  • @valverij 这就是那个方法。 SqlConnectionStringBuilder stringBuilder = new SqlConnectionStringBuilder();布尔 OnUni; OnUni = (System.Environment.UserDomainName == "SOAC") ?真假; stringBuilder.DataSource = (OnUni) ? @"SOACSQLSERVER\SHOLESQLBSC" : "(本地)"; stringBuilder.InitialCatalog = "CarRental_P117365"; stringBuilder.IntegratedSecurity = true; return new SqlConnection(stringBuilder.ConnectionString);
  • 您是否使用调试器单步执行代码以验证适配器是否正在填充DataSetRentals?

标签: sql datagridview ado.net


【解决方案1】:

您可能忘记调用SqlConnection.Open() 来实际打开连接。我还建议将您的连接包装在 using 中并在其末尾显式调用 SqlConnection.Close(),这样您就不会意外地将其打开:

using(SqlConnection conn = Database.GetConnection())
{
    conn.Open();

    /*
        rest of code here
    */

    conn.Close();
}

有关正确打开/处理 SqlConnections 的其他一些好的信息/示例,您还可以查看这些 SO 问题:

【讨论】:

  • 不。那没有用。 :(关于我可能遗漏了什么或做错了什么的任何其他建议(完全错误以至于它不能工作,但不是那么错误它会给出异常或错误)?
  • 我再看看你上面的代码。即便如此,在使用之前肯定还是需要打开连接。
  • 那可能是一回事。但它仍然无法打开它。我不知道为什么它不起作用。我确实尝试过使用调试器,但我不知道我在寻找什么。
  • 如果您在CustomerGrid.DataSource= DataSetRentals.Tables["Customer"]; 行上设置断点,那么您可以将DataSetRentals.Tables["Customer"].Rows.Count 之类的内容添加到监视窗口,以查看实际从查询中返回的记录数
  • 了解如何在 Visual Studio 中使用调试器将使查明(和解释)问题变得更加容易。这是我找到的概述基础知识的视频(大约 17 分钟):youtube.com/watch?v=C0vDKXIq_9A
【解决方案2】:

您没有将数据绑定到任何数据源。

试试这样的

            using(SqlConnection conn = Database.GetConnection())
            try
            {
                {
                 ------your code here up to DataTable Car-----
                  DataTable Car;
                 Car = DataSetRentals.Tables["Car"];

                 gridview.Datasource = Car;


                }
            }
            catch (SqlException sqlex )
            {
                string msg = "Fetch Error:";
                msg += sqlex.Message;
                throw new Exception(msg);
            }

没有必要打开或关闭 SQL 连接,因为这是使用打开它的顶部的 using 语句完成的,当它完成关闭时 \ 释放连接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2012-06-16
    • 2018-09-09
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多