【问题标题】:GridControl Master - Detail view with a stored procedureGridControl Master - 带有存储过程的详细视图
【发布时间】:2018-05-18 09:05:28
【问题描述】:

我的第一个存储过程如下所示:

Use [Stock]
Go
Create Proc Get_Orders
AS
SELECT [Number_Order]
  ,[Date_Order]
  ,[FullName]
  ,[Location]
FROM [Order]

我的第二个存储过程如下所示:

USE [Stock]
GO
ALTER Proc [dbo].[Get_Order_Res]
AS

SELECT i.Name_Item
  ,od.[ID_Order]
  ,od.[Project]
  ,od.[Length]
  ,od.[Width]
  ,od.[Quantity]
  ,od.[Weight]
  ,od.[Supplier]
  ,od.[GDS_Name]
  ,od.[GDS_Date]
  ,od.[WorkshopName]
  ,od.[WorkshopDate]
  ,od.[ReservedQty]
 FROM OdredDetails od
   INNER JOIN ItemQuantity iq 
           ON iq.ID_ItemQte = od.ID_ItemQte 
   INNER JOIN item i
           ON i.ID_Item = iq.ID_Item 
   INNER JOIN [Order] ord
           ON ord.Number_Order=od.ID_Order
 where ord.[Location]='PRODUCTION'

在我的 c# 代码中,我使用此代码从存储过程中获取数据

        public DataTable Get_Order_Res()
    {
        DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
        DataTable dt = new DataTable();
        dt = DAL.SelectData("Get_Order_Res", null);
        DAL.Close();
        return dt;

    }
    public DataTable Get_Orders()
    {
        DAL.DataAccessLayer DAL = new DAL.DataAccessLayer();
        DataTable dt = new DataTable();
        dt = DAL.SelectData("Get_Orders", null);
        DAL.Close();
        return dt;

    }

在我的表单中,我使用此代码创建主详细信息视图

    public partial class FRM_Reserved : Form
{
BL.CLS_Order ord = new BL.CLS_Order();
DataTable master = new DataTable();
DataTable details = new DataTable();
DataSet dataSet = new DataSet();
public FRM_Reserved()
 {
InitializeComponent();      
master = ord.Get_Orders();
details = ord.Get_Order_Res();
dataSet.Tables.Add(master);
dataSet.Tables.Add(details);
dataSet.Relations.Add("OderDetails",
dataSet.Tables["master"].Columns["Number_Order"],
dataSet.Tables["details"].Columns["ID_Order"]);
gridControl3.DataSource = dataSet.Tables["master"];

但是当我运行代码时出现错误:对象引用未设置为对象的实例。 请帮助我,在此先感谢。

【问题讨论】:

  • 所以需要调试检查哪一行报错并修复。
  • 是的,我试过了,我发现问题出在 dataSet.Relations.Add 但我找不到解决方法。我还检查存储过程是否返回数据 gridControl3.DataSource =ord.Get_Orders( );

标签: c# winforms stored-procedures devexpress gridcontrol


【解决方案1】:

由于您没有为数据表命名,因此当您尝试访问它们时,它会返回 null。

dataSet.Tables["master"] // this returns null

要解决此问题,请为您的数据表命名

DataTable master = new DataTable("master");
DataTable details = new DataTable("details");

【讨论】:

  • 我改了,还是一样的问题。
  • 检查是否在这行之后,master = ord.Get_Orders();数据表名设置了吗?
  • 对于master我得到Table1,对于细节我得到Table2
  • 然后将它们用作 dataSet.Tables["Table1"] 或更新它们的名称
  • 我改变了它,它工作了。谢谢 Shivani Katukota 我非常感激
猜你喜欢
  • 2012-08-10
  • 1970-01-01
  • 2020-12-19
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多