摘要:相同的用户控件在不同级别的ASPxGridView嵌套中显示注释。如何参数化用户控件?
详细信息:我想为项目显示ASPxGridView。项目的每个DetailRow都显示嵌套的ASPxGridView,其中里程碑和另一个ASPxGridView 注释位于同一级别(在同一个DetailRow内)。
里程碑网格视图行也可以展开以显示详细信息。里程碑的详细信息还包含注释 - 在不同的嵌套级别。见图:
带有SqlDataSource(名为dsNotes
)的绿框ASPxGridView是名为NotesControl
的用户控件。
上级NotesControl
显示项目和所有项目里程碑的UNION注释。如果用户想要,他/她可以扩展里程碑以仅查看与里程碑相关的注释。
NotesControl
的SqlDataSource使用带有参数sp_notes
和@idproj
的存储过程@idmilestone
。默认值-1
表示该参数不适用。通过这种方式,sp_notes
可以返回所有项目的所有注释,给定项目的所有注释(即项目及其里程碑),或仅返回给定的里程碑注释。
需要知道:我应该如何正确地将idproj
和idmilestone
传递给NotesControl
用户组件?
我尝试了什么:早些时候,我的NotesControl
使用..._BeforePerformDataSelect
事件处理程序来填充Session["idproj"]
和Session["idmilestone"]
。 dsNotes
的SqlDataSource参数绑定到Session。但是,Session
查找表是全局的,并且无法存储NotesControl
的单独实例的参数值。
建议的方法是什么?可能还有其他选择吗?
更新:采用建议来介绍名为NotesControl
和ProjectID
的{{1}} - 类属性,并具有{{1}的以下定义MilestoneID
中的数据源...我可以修改HTML片段,以便以某种方式传递属性值吗?
dsNotes
答案 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();
}
}
注意 - 未经测试的代码可能需要根据需要进行调整。