GridControl Master - 带有存储过程的详细信息视图
GridControl Master - Detail view with a stored procedure
我的第一个存储过程如下所示:
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"];
但是当我 运行 代码时,我得到 error:Object 引用未设置为对象的实例。
请帮助我,在此先感谢。
由于您没有为数据表命名,因此当您尝试访问它们时,它 returns 为空。
dataSet.Tables["master"] // this returns null
要解决此问题,请为您的数据表命名
DataTable master = new DataTable("master");
DataTable details = new DataTable("details");
我的第一个存储过程如下所示:
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"];
但是当我 运行 代码时,我得到 error:Object 引用未设置为对象的实例。
由于您没有为数据表命名,因此当您尝试访问它们时,它 returns 为空。
dataSet.Tables["master"] // this returns null
要解决此问题,请为您的数据表命名
DataTable master = new DataTable("master");
DataTable details = new DataTable("details");