Asp.net ListBox.ListItem.Selected始终返回false
这需要一点时间来解释,但这里是: 1) 我创建了一个带有占位符控件的.aspx页面 2) 我使用该页面从数据库加载“container”UserControl:Asp.net ListBox.ListItem.Selected始终返回false,asp.net,user-controls,listbox,devexpress,listitem,Asp.net,User Controls,Listbox,Devexpress,Listitem,这需要一点时间来解释,但这里是: 1) 我创建了一个带有占位符控件的.aspx页面 2) 我使用该页面从数据库加载“container”UserControl: protected override void OnInit(EventArgs e) { base.OnInit(e); try { Utility.MenuItem menuItem = CurrentMenuHandler.ByCurrentPat
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
try
{
Utility.MenuItem menuItem = CurrentMenuHandler.ByCurrentPath();
var clientId = CurrentClient.ID;
var userId = CurrentUser.ID;
if (menuItem.UserControlPath.Length > 0)
{
UserControl control = base.LoadControl(menuItem.UserControlPath, 2, clientId, userId, menuItem.ID);
plContainerControl.Controls.Add(control);
}
}
catch (Exception ex)
{
Response.Write(ex.ToString());
}
}
3) 在容器控件中,当gridview进入“编辑”模式时,我使用DevXPress gridview动态加载用户控件
5) 然后,我创建了一个界面,所有回发用户控件都实现了该界面:
public interface IParameter
{
IGridable ClientParameter { get; set; }
}
6) 下面是该接口的实现:
#region IParameter Members
public IGridable ClientParameter
{
get
{
foreach (ParameterValue parameterValue in GridItem.ParameterValues)
{
parameterValue.isSelected = false;
foreach (string selectedValue in lstDimension.GetSelectedValues())
{
if (parameterValue.ValueName == selectedValue)
{
parameterValue.isSelected = true;
}
}
}
return GridItem;
}
set
{
ClientParameter = value;
}
}
#endregion
7) 在container控件中,当我从列表框(或ClientParameter)获取所选值时,这就是我从列表框获取实际所选值时遇到的问题
foreach (IGridable gridColumnTemplate in gridColumns)
{
var myControl = grid.FindEditFormTemplateControl(gridColumnTemplate.ParamName);
if (myControl is IParameter)
{
var clientControl = (IParameter)myControl;
gridColumnTemplate.ParameterValues = clientControl.ClientParameter.ParameterValues;
var parameter = parameterListElement.AppendChild(parameterXml.CreateElement("Parameter"));
var parameterName = parameterXml.CreateAttribute("ParameterName");
parameterName.Value = gridColumnTemplate.ParamName;
parameter.Attributes.Append(parameterName);
foreach (ParameterValue paramValue in clientControl.ClientParameter.ParameterValues)
{
if (paramValue.isSelected)
{
XmlNode value = parameter.AppendChild(parameterXml.CreateElement("pv"));
value.InnerXml = paramValue.ValueId;
}
}
}
}
你能在某处发布一个展示这个问题的示例项目吗?我来看看。我担心,仅使用此代码很难找到问题的原因:(我从项目中删除了所有代码,无法重现此问题。
#region IParameter Members
public IGridable ClientParameter
{
get
{
foreach (ParameterValue parameterValue in GridItem.ParameterValues)
{
parameterValue.isSelected = false;
foreach (string selectedValue in lstDimension.GetSelectedValues())
{
if (parameterValue.ValueName == selectedValue)
{
parameterValue.isSelected = true;
}
}
}
return GridItem;
}
set
{
ClientParameter = value;
}
}
#endregion
foreach (IGridable gridColumnTemplate in gridColumns)
{
var myControl = grid.FindEditFormTemplateControl(gridColumnTemplate.ParamName);
if (myControl is IParameter)
{
var clientControl = (IParameter)myControl;
gridColumnTemplate.ParameterValues = clientControl.ClientParameter.ParameterValues;
var parameter = parameterListElement.AppendChild(parameterXml.CreateElement("Parameter"));
var parameterName = parameterXml.CreateAttribute("ParameterName");
parameterName.Value = gridColumnTemplate.ParamName;
parameter.Attributes.Append(parameterName);
foreach (ParameterValue paramValue in clientControl.ClientParameter.ParameterValues)
{
if (paramValue.isSelected)
{
XmlNode value = parameter.AppendChild(parameterXml.CreateElement("pv"));
value.InnerXml = paramValue.ValueId;
}
}
}
}