如何将从存储过程创建的绑定源绑定到gridview

Posted

技术标签:

【中文标题】如何将从存储过程创建的绑定源绑定到gridview【英文标题】:How do i bind a bindingsource created from stored procedure to a gridview 【发布时间】:2022-01-07 18:00:20 【问题描述】:

首先,我的数据库中有 3 个表:

Student
StudentID
Name
Adress
OtherInfo
TuitionFee
StudentID
Years
Semester
FeeAmount
Detailed_TuitionFee
StudentID
Years
Semester
PaymentDate
PaymentAmount

然后我创建了一个存储过程来选择[TuitionFee ][Detailed_TuitionFee ] 上的某个列,并以StudentID 作为参数。

create procedure 
    @StudentID
as 
begin
    select 
    from [TuitionFee ]
    left outer join [Detailed_TuitionFee ] on TuitionFee.StudentID = Detailed_TuitionFee.StudentID 
                                           and TuitionFee.Semester = Detailed_TuitionFee.Semester
    where TuitionFee.StudentID = @StudentID 
      and Detailed_TuitionFee.StudentID = @StudentID

在C#中,我写的代码是

BindingSource bdsTuitionInfo = new BindingSource();
String studentID; 
GridControl gCtrlTuition;
GridView gViewTuition;
String sqlCmd = "exec Stored procedure" + studentID;

DataTable dt = Program.ExecSqlDataTable(sqlCmd); // create a Data table from SP
bdsTuitionInfo.DataSource = dt; // import data table into Binding source
gCtrlTuition.DataSource = bdsTuitionInfo; // import Binding source into Grid Control
gViewTuition.DataSource = bdsTuitionInfo; // The code shows ERROR: "Property or indexer 'property' cannot be assigned to -- it is read only" here

如何在GridView 中显示来自此BindingSource 的数据? 我的GridView 中有什么需要调整或配置的吗?

【问题讨论】:

【参考方案1】:

我从未使用过 DevExpress 的网格,但他们的 official example 似乎表明 GridView 不是您需要为其分配 DataSource 的东西;您将源分配给 GridControl,然后可能通过 GridControl 访问 GridView 以设置其他属性..

        gridControl1.DataSource = DataHelper.GetData(30);
        // The grid automatically creates columns for the public fields found in the data source. 
        // Calling the gridView1.PopulateColumns method is not required unless the gridView1.OptionsBehavior.AutoPopulateColumns is disabled

        // The grid automatically creates a GridView that presents the underlying data as a two-dimensional table.
        GridView gridView1 = gridControl1.MainView as GridView;

        GridView;

        // Obtain created columns.
        GridColumn colCompany = gridView1.Columns["CompanyName"];
        ...

【讨论】:

谢谢你的回答!!这是我真正需要的。 GridView 现在可以显示我的存储过程中的行。祝你今天愉快。【参考方案2】:

首先将您的数据填充到数据表 dt 中。然后只需在您的页面上添加 GridView 控件。然后使用(如果您使用 ASP.NET Web 窗体):

GridView.DataSource = dt;
//GridView.Databind(); //just in asp.net webform

在 ASP.NET Web 窗体中有一个 Grid View 控件,我想你会使用它。

【讨论】:

我正在使用 DevExpress 组件构建 Winform 项目。因此,我不知道哪一行来自 ASP.NET。我尝试了您推荐的 2 行,但它们显示错误:“CS0200:无法将属性或索引器‘属性’分配给——它是只读的”和错误:““GridView”不包含“DataBind”的定义,并且无法访问扩展方法“DataBind””。 DataBind 仅适用于 ASP.NET Webforms。首先,您应该在 DxGridControls 中定义具有真实名称的列。然后将数据填充到数据表中。然后将数据绑定到 DxGrigControl。当您在窗体上添加网格控件时,您可以看到网格控件底部的小窗体包含两个按钮。点击Run Designer并定义你的列。 i.stack.imgur.com/8nfFr.jpg 感谢您的回答!!我在 GridView 中没有任何定义的列,因此数据也没有显示。这是我第一次使用不是来自 DataSource 的 DataTable 处理 DevExpress(也是我第一次使用 C# 和 DevExpress),所以我搞砸了很多。祝你有个美好的一天,先生。

以上是关于如何将从存储过程创建的绑定源绑定到gridview的主要内容,如果未能解决你的问题,请参考以下文章

uwp gridview项目源甚至没有执行

Web开发中,如何在GridView每次绑定后将滚动条移动到下方?

gridveiw直接显示数据,不绑定数据库,如何在后台添加数据绑定到gridview

如何将列表数组与 GridView 或 DataList 绑定?

如何绑定在父 Gridview 控件的模板字段内使用的子 Gridview 控件?

如何将来自 .NET Web 服务的 DataSet 绑定到 android GridView?