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

时间:2015-01-29 11:53:24

标签: asp.net gridview user-controls devexpress datasource

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

详细信息:我想为项目显示ASPxGridView。项目的每个DetailRow都显示嵌套的ASPxGridView,其中里程碑和另一个ASPxGridView 注释位于同一级别(在同一个DetailRow内)。

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

带有SqlDataSource(名为dsNotes)的绿框ASPxGridView是名为NotesControl的用户控件。

上级NotesControl显示项目和所有项目里程碑的UNION注释。如果用户想要,他/她可以扩展里程碑以仅查看与里程碑相关的注释。

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

需要知道:我应该如何正确地将idprojidmilestone传递给NotesControl用户组件?

我尝试了什么:早些时候,我的NotesControl使用..._BeforePerformDataSelect事件处理程序来填充Session["idproj"]Session["idmilestone"]dsNotes的SqlDataSource参数绑定到Session。但是,Session查找表是全局的,并且无法存储NotesControl的单独实例的参数值。

建议的方法是什么?可能还有其他选择吗?

更新:采用建议来介绍名为NotesControlProjectID的{​​{1}} - 类属性,并具有{{1}的以下定义MilestoneID中的数据源...我可以修改HTML片段,以便以某种方式传递属性值吗?

dsNotes

1 个答案:

答案 0 :(得分:1)

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

实施例 -

 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>

然后在pageload

   protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
          dsNotes.SelectParameters["MilestoneID"].DefaultValue = MilestoneID.ToString();
          dsNotes.SelectParameters["ProjectID"].DefaultValue = ProjectID.ToString();
        }
    }

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