Asp.net 如何在基于ASPxGridView的用户控件中参数化数据源?
摘要:同一用户控件在不同级别的ASPxGridView嵌套中显示注释。如何参数化用户控件 详细信息:我想为项目显示一个ASPxGridView。项目的每个详细信息行显示嵌套的ASPxGridView,其中包含里程碑,另一个ASPxGridView注释,位于同一详细信息行内 里程碑网格视图行也可以展开以显示详细信息。里程碑的详细信息还包含不同嵌套级别的注释。如图所示: 绿色边框的ASPxGridView及其SqlDataSource(名为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的用户控件 上
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();
}
}