Asp.net 如何在基于ASPxGridView的用户控件中参数化数据源?

Asp.net 如何在基于ASPxGridView的用户控件中参数化数据源?,asp.net,gridview,user-controls,devexpress,datasource,Asp.net,Gridview,User Controls,Devexpress,Datasource,摘要:同一用户控件在不同级别的ASPxGridView嵌套中显示注释。如何参数化用户控件 详细信息:我想为项目显示一个ASPxGridView。项目的每个详细信息行显示嵌套的ASPxGridView,其中包含里程碑,另一个ASPxGridView注释,位于同一详细信息行内 里程碑网格视图行也可以展开以显示详细信息。里程碑的详细信息还包含不同嵌套级别的注释。如图所示: 绿色边框的ASPxGridView及其SqlDataSource(名为dsNotes)是名为NotesControl的用户控件 上

摘要:同一用户控件在不同级别的ASPxGridView嵌套中显示注释。如何参数化用户控件

详细信息:我想为项目显示一个ASPxGridView。项目的每个详细信息行显示嵌套的ASPxGridView,其中包含里程碑,另一个ASPxGridView注释,位于同一详细信息行内

里程碑网格视图行也可以展开以显示详细信息。里程碑的详细信息还包含不同嵌套级别的注释。如图所示:

绿色边框的ASPxGridView及其SqlDataSource(名为
dsNotes
)是名为
NotesControl
的用户控件

上层
NotesControl
显示项目和所有项目里程碑的注释的联合。如果用户愿意,他/她可以展开里程碑,只查看与里程碑相关的注释

NotesControl
的SqlDataSource使用存储过程
sp_notes
和参数
@idproj
@idmilestone
。默认值
-1
表示该参数不应应用。通过这种方式,
sp_notes
可以返回或删除所有项目的所有注释、给定项目的所有注释(即项目及其里程碑),或仅返回给定里程碑注释

需要知道:我应该如何正确地将
idproj
idmilestone
传递到
NotesControl
用户组件

我尝试的内容:早些时候,我的
NotesControl
在执行数据选择之前使用了
事件处理程序来填充
会话[“idproj”]
会话[“idmilestone”]
dsNotes
的SqlDataSource参数已绑定到会话。但是,
会话
查找表是全局的,它不能存储
NotesControl
单独实例的参数值

推荐的方法是什么?可能有其他选择吗

更新:采纳建议,引入名为
ProjectID
MilestoneID
NotesControl
类属性,并在
NotesControl.ascx
中对
dsNotes
数据源进行以下定义。。。我是否可以修改HTML片段,使其以某种方式传递属性值


您需要在用户控件中创建两个公共属性。 然后在需要访问用户控件时设置它们,然后使用该属性绑定
数据源

范例-

 namespace projects.WebApplication.mySystem.Controls
 {
  public partial class myusercontrol: System.Web.UI.UserControl
  {
    public event EventHandler Close;
    public event EventHandler Show;

    public int MilestoneID{get;set;}
    public int ProjectID{get;set;}

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
          yourgridview.Datasource= MyDatabaseHelper.GetGridData(MilestoneID,ProjectID);
          yourgridview.DataBind();
        }
    }
  }
 } 

更新

有两种方法可以实现你想要的

1) 按照当前HTML代码并使用会话变量,只需更新属性集中的会话变量即可

  private int _mileStoneID = int.MinValue;
  public int MilestoneID{get{return _mileStoneID;}set{
    Session["idmilestone"] = value;
    _mileStoneID = value;
  }}
并对其他属性执行相同的操作

2) 您可以按如下所示更改ASP标记脚本代码

 <SelectParameters>
    <asp:Parameter Name="MilestoneID" Type="Int32" DefaultValue=0/>
    <asp:Parameter Name="ProjectID" Type="Int32" DefaultValue=0/>
</SelectParameters>

注意-未测试的代码可能需要根据需要进行调整。

您可以在用户控件中创建2个属性,并从页面中进行设置。感谢您的提示。我精通OO编程(C++),但不熟悉APS.NET编程。因此,我可以定义用户控件的属性(在类定义中),然后从外部代码设置它。我猜ASP.NET框架会创建一些幕后用户控件的实例。如果数据源是用户控件的一部分,如何将属性值作为其存储过程参数传递?请查看“更新:”。是否可以修改HTML数据源定义以使用属性?我已经完全改变了方法。无论如何,谢谢你的提示。
   protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
          dsNotes.SelectParameters["MilestoneID"].DefaultValue = MilestoneID.ToString();
          dsNotes.SelectParameters["ProjectID"].DefaultValue = ProjectID.ToString();
        }
    }