C# 带有下拉列表的动态Formview失败
188分 400个职位 带有下拉列表的动态Formview失败得很厉害 6小时21分钟前|链接 我脑子里有一个想法,我试图实现它,但它不起作用。需要做的是:用户从列表中选择一个项目。根据选择动态构建formview。formview需要是动态的,因为查询将返回非空值中包含空值的数据集,例如: 4600,1,4,零,零,68 “4600”是型号,其他所有内容都是对应于组件的ID。空值表示此字段不属于4600 此后,formview的构建方式是将“4600”馈送到标签。对于每个非空值,我需要构建一个下拉列表,每个下拉列表都有一个单独的datascource,不是ODS的东西,而是对BLL类的调用。然后将非空值分配给ddl的selected value属性 很简单,不是吗?下面是代码,它失败得很厉害。实际上只是在无限循环中超时。超时发生在ddlTonerBlack_数据绑定方法中。有人能告诉我我做错了什么吗?谢谢EJM aspx标记:C# 带有下拉列表的动态Formview失败,c#,asp.net,C#,Asp.net,188分 400个职位 带有下拉列表的动态Formview失败得很厉害 6小时21分钟前|链接 我脑子里有一个想法,我试图实现它,但它不起作用。需要做的是:用户从列表中选择一个项目。根据选择动态构建formview。formview需要是动态的,因为查询将返回非空值中包含空值的数据集,例如: 4600,1,4,零,零,68 “4600”是型号,其他所有内容都是对应于组件的ID。空值表示此字段不属于4600 此后,formview的构建方式是将“4600”馈送到标签。对于每个非空值,我需要构建一个
<form id="form1" runat="server">
<div>
<asp:DropDownList runat="server" ID="ddlPrinterModels" AppendDataBoundItems="True"
DataTextField="Hardware_Model" DataValueField="Hardware_Model"
width="246px" CssClass="AssetMngnt-smallFont" AutoPostBack="true" >
<asp:ListItem Value="-1" Selected="True">-- Select Printer Model --</asp:ListItem>
</asp:DropDownList>
<hr />
<asp:PlaceHolder id="DetailsViewPlaceHolder" runat="server"/>
</div>
<!-- NOT A COMPLETE QUERY -->
<asp:sqldatasource id="ODSTonerBlackByModel"
selectcommand="SELECT [Hardware_Model], [Ident_Black], [Ident_Cyan], [Ident_Yellow] FROM [cPrinters_Toners] WHERE ([Hardware_Model] = @Hardware_Model)"
connectionstring="<%$ ConnectionStrings:CISF_Asset_Management %>"
runat="server">
<SelectParameters>
<asp:ControlParameter ControlID="ddlPrinterModels" Name="Hardware_Model"
PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</form>
和模板类:
public class FormViewTemplate : System.Web.UI.ITemplate
{
void System.Web.UI.ITemplate.InstantiateIn(System.Web.UI.Control container)
{
Label lblPrinterModel = new Label();
lblPrinterModel.ID = "lblHardwareModel";
lblPrinterModel.DataBinding += new EventHandler(PrinterModelLabel_DataBinding);
container.Controls.Add(lblPrinterModel);
DropDownList ddlTonerBlack = new DropDownList();
ddlTonerBlack.ID = "ddlTonerBlack";
ddlTonerBlack.DataBinding +=new EventHandler(ddlTonerBlack_DataBinding);
container.Controls.Add(ddlTonerBlack);
}
private void PrinterModelLabel_DataBinding(Object sender, EventArgs e)
{
Label lblPrinterModel = (Label)sender;
FormView formViewContainer = (FormView)lblPrinterModel.NamingContainer;
DataRowView rowView = (DataRowView)formViewContainer.DataItem;
lblPrinterModel.Text = rowView["Hardware_Model"].ToString();
}
private void ddlTonerBlack_DataBinding(Object sender, EventArgs e)
{
DropDownList ddlTonerBlack = (DropDownList)sender;
FormView formViewContainer = (FormView)ddlTonerBlack.NamingContainer;
DataRowView rowView = (DataRowView)formViewContainer.DataItem;
dalConsumables_TonerBlack x = new dalConsumables_TonerBlack();
ddlTonerBlack.DataSource = x.GetListTonersBlack();
ddlTonerBlack.DataBind();
ddlTonerBlack.SelectedValue = rowView["Ident_Black"].ToString();
}
}
得到一个无限循环是因为在ddlTonerBlack_数据绑定方法中,您在刚刚触发数据绑定事件的控件上调用了一个数据绑定方法
只需在同一控件的数据绑定事件处理程序中触发一个数据绑定事件,这就是为什么会得到一个无限循环。之所以会得到一个无限循环,是因为在ddlTonerBlack\u数据绑定方法中,您在刚刚触发数据绑定事件的控件上调用了一个数据绑定方法 只需在同一控件的databind事件处理程序中触发databind事件,这就是为什么会得到一个无限循环
public class FormViewTemplate : System.Web.UI.ITemplate
{
void System.Web.UI.ITemplate.InstantiateIn(System.Web.UI.Control container)
{
Label lblPrinterModel = new Label();
lblPrinterModel.ID = "lblHardwareModel";
lblPrinterModel.DataBinding += new EventHandler(PrinterModelLabel_DataBinding);
container.Controls.Add(lblPrinterModel);
DropDownList ddlTonerBlack = new DropDownList();
ddlTonerBlack.ID = "ddlTonerBlack";
ddlTonerBlack.DataBinding +=new EventHandler(ddlTonerBlack_DataBinding);
container.Controls.Add(ddlTonerBlack);
}
private void PrinterModelLabel_DataBinding(Object sender, EventArgs e)
{
Label lblPrinterModel = (Label)sender;
FormView formViewContainer = (FormView)lblPrinterModel.NamingContainer;
DataRowView rowView = (DataRowView)formViewContainer.DataItem;
lblPrinterModel.Text = rowView["Hardware_Model"].ToString();
}
private void ddlTonerBlack_DataBinding(Object sender, EventArgs e)
{
DropDownList ddlTonerBlack = (DropDownList)sender;
FormView formViewContainer = (FormView)ddlTonerBlack.NamingContainer;
DataRowView rowView = (DataRowView)formViewContainer.DataItem;
dalConsumables_TonerBlack x = new dalConsumables_TonerBlack();
ddlTonerBlack.DataSource = x.GetListTonersBlack();
ddlTonerBlack.DataBind();
ddlTonerBlack.SelectedValue = rowView["Ident_Black"].ToString();
}
}