C# 在网格模板列内填充DropDownList
我在一个obout网格的模板列中有一个dropdownlist。目前,我正在使用sqldatasource填充页面加载上的dropdownlist。但是,我现在必须根据某个列的值加载dropdownlist。例如:如果status=1,我将使用与status 1相关的可用选项列表填充dropdownlistC# 在网格模板列内填充DropDownList,c#,asp.net,gridview,rowdatabound,obout,C#,Asp.net,Gridview,Rowdatabound,Obout,我在一个obout网格的模板列中有一个dropdownlist。目前,我正在使用sqldatasource填充页面加载上的dropdownlist。但是,我现在必须根据某个列的值加载dropdownlist。例如:如果status=1,我将使用与status 1相关的可用选项列表填充dropdownlist <obout:Column ID="colStatus" DataField="wf_status_id" Align="center" HeaderText="Status" He
<obout:Column ID="colStatus" DataField="wf_status_id" Align="center" HeaderText="Status" HeaderAlign="center" Width="130px" Wrap="true" runat="server" AllowGroupBy="true" AllowFilter="true">
<TemplateSettings EditTemplateId="tmpStatusIDEdit" TemplateId="tmpStatusID" />
</obout:Column>
<obout:GridTemplate runat="server" ID="tmpStatusID" >
<Template>
<%# Container.DataItem["Status"]%>
</Template>
</obout:GridTemplate>
<obout:GridTemplate runat="server" ID="tmpStatusIDEdit" ControlID="ddlStatus" ControlPropertyName="value">
<Template>
<obout:OboutDropDownList runat="server" ID="ddlStatus" Width="100%" Height="200" MenuWidth="215" DataSourceID="sdsStatus" DataTextField="wf_status_text" DataValueField="wf_status_id" />
</Template>
</obout:GridTemplate>
public void OnGridRowDataBound(object sender, Obout.Grid.GridRowEventArgs e)
{
if (e.Row.RowType == Obout.Grid.GridRowType.DataRow)
{
DropDownList ddlStatus = new DropDownList();
ddlStatus = (DropDownList)e.Row.FindControl("ddlStatus");
//LOAD DROP DOWN HERE//
}
}
public void OnGridRowDataBound(对象发送方,Obout.Grid.GridRowEventArgs e)
{
if(e.Row.RowType==Obout.Grid.GridRowType.DataRow)
{
DropDownList ddlStatus=新的DropDownList();
ddlStatus=(DropDownList)e.Row.FindControl(“ddlStatus”);
//负载下降到这里//
}
}
当我尝试执行这段代码时,每次都显示ddlStatus为null。我尝试了很多方法来获得这个,但由于某些原因,我似乎无法获得它。也许她的眼睛或其他想法可以帮助我。请让我知道我做错了什么。提前谢谢你
更新:数据绑定事件代码
受保护的无效DDL状态_数据绑定(对象发送方、事件参数e)
{
Obout.Interface.OboutDropDownList ddl=(Obout.Interface.OboutDropDownList)(发送方);
字符串statusID=Eval(“wf_status_id”).ToString();
}
我添加了数据源,因为我看不到触发数据绑定事件的其他方法。我对
obout
控件一无所知,但我必须假设它们的行为与asp.net控件非常相似,并且刚刚被扩展。考虑到这个假设,我将尝试回答你的问题
您的RowDataBound
事件存在一些编码问题。。。例如,我不知道为什么要定义一个new
DropDownList
,然后尝试用下一行覆盖它。另外,听起来下一行无论如何都会返回null
首先,我建议不要在行级别使用DataBound
事件。使用控件的数据绑定
事件,因为它可以更好地本地化代码,因为您可以触发特定控件的数据绑定
,因此不必搜索它。如果您的代码发生更改(标记或代码隐藏),那么更改也会容易得多,因为它不会影响其他事情,并且引入错误的空间也会减少
因此,我将进行以下更改以解决此问题:
更改您的下拉列表
定义以实现数据绑定
:
<obout:OboutDropDownList runat="server" ID="ddlStatus" Width="100%" Height="200"
MenuWidth="215" OnDataBinding="ddlStatus_DataBinding" />
你也可以看到我很久以前回答的另一个问题,看看它是否有帮助,因为它正在做同样的事情,但是有一个中继器
,但它与网格几乎是一样的:
编辑:将代码更改为使用
OboutDropDownList
在数据绑定中
您可以在obout知识库中找到大量示例和示例。这些应该可以帮助您:
(它们指的是comboBox,但您可以很容易地对它们进行调整以进行ddl)我的问题是,我需要从第1列中获取一个值,以便仅使用允许的列表项填充dropdownlist。如何在执行数据绑定时获取值?@Alex非常简单,在
数据绑定
事件期间,您只需执行评估
即可从正在绑定的当前行数据中获取值。示例:string yourColumnValue=Eval(“YourColumnName”).ToString()
非常感谢您的帮助Kelsey!!但是,当我尝试从其中一列中提取值时,我得到了“数据绑定方法,如Eval()、XPath()和Bind()只能在数据绑定控件的上下文中使用”。它是否需要是一个控件才能从中提取值?@AlexEval
仅在数据绑定
事件中起作用,数据绑定
事件仅适用于数据绑定控件。
<obout:OboutDropDownList runat="server" ID="ddlStatus" Width="100%" Height="200"
MenuWidth="215" OnDataBinding="ddlStatus_DataBinding" />
protected void ddlStatus_DataBinding(object sender, System.EventArgs e)
{
// This will point to ddlStatus on the current row that is DataBinding so you
// don't have to search for it.
OboutDropDownList ddl = (OboutDropDownList)(sender);
// Now you can fill the DropDownList and set the default value how ever you like
...
}