2010-02-01 115 views
0

我有一个下拉列表,我已经手动数据绑定。我目前获取数据,遍历每个项目,并根据项目中的值更改单个ListItem的CSS。如何在下拉列表的列表项中强制换行?

例如:

foreach (Site mySite in myList) 
     { 
      ListItem li = new ListItem(mySite.FullAddress, mySite.Id.ToString()); 
      if (mySite.DisabledFlg) 
      { 
       li.Attributes.Add("style", "color:#999"); 
      } 
      this.Items.Add(li); 
     } 

我试图强制文本在ListItem在某些点突破。从数据源中检索的字符串当前在任何应该有换行符的位置都有一个“\ r \ n”。这适用于在正常文本框中显示,但它不适用于listitem。 我试过用"<br>"替换“\ r \ n”,但是当我这样做时,它只是在listem中显示<br>以及其余的文本。我尝试在带有宽度属性的"div"中包装listitem内容,但它也只是在ListItem文本中直接显示"div"标记。 我也试着添加以下的列表项的属性在绑定:

   li.Attributes.Add("width", "100px"); 

但是,这并没有导致任何变化无论是。

我见过自定义下拉列表控件,其中有多行列表项。我如何获得相同的结果?

+0

“我看过定制的下拉列表控件,它们中有多行列表项” - 任何公共URL都可以指向我们,所以我们知道你在做什么? – AakashM 2010-02-01 17:27:53

+0

我最终做的是使用AjaxControlToolkit的DropDownExtender使用带有可选行的文本框和单列gridview制作假下拉列表。它认为我正在寻找的结果,因为它不可能真正与标准的下拉列表控件。 – 2010-02-03 18:05:34

回答

3

我不认为这是可能的。 DropDownList控件呈现一个<select>元素,但它不是为子元素<option>设计的换行符。

但是,实现同样效果的另一种方法是在将数据绑定到DropDownList之前处理数据。您可以在换行符上分割并将相同的DataValue分配给这些重复的项目。你最终会与HTML类似如下:

<select> 
    <option value="A">A</option> 
    <option value="A">A.2</option> 
    <option value="B">B</option> 
</select> 

您可能还可以找到一些花哨的Javascript控件或插件,可以模拟一个下拉控制,但允许你比平原select元素更多的灵活性。

2

我想你必须添加换行符作为自己的列表项。然后,您可以执行一些Javascript和/或验证,以防止用户选择该“项目”。