2008-09-05 12 views

Antwort

1

Wenn Sie wirklich, wirklich brauchen, wäre eine Idee, eine benutzerdefinierte ListBox-Klasse zu erstellen, deren HTML wie folgt aussieht: legt die Breite des SELECT zu dem Ihrer Breite des breitesten Wert (die maximale Breite der Scrollbar , zum Beispiel). Wickeln Sie nun das SELECT innerhalb eines DIV der 'eingeschränkten' Größe und lassen Sie es bei Überlauf scrollen.

Hier ein kleines Beispiel ist diese Zeilen nach unten beginnend, hier ist die Art von HTML Sie durch eine Steuer ausspucken wollen:

<div style="width:200px; height:100px; overflow:auto;"> 
<SELECT size="4"> 
<OPTION 
Value="1">blahblahblahblahblahblahblahblahblahblah blahblah</OPTION> 
<OPTION Value="2">2</OPTION> 
<OPTION Value="3">3</OPTION> 
<OPTION Value="4">4</OPTION> 
</SELECT> 
</div> 

so im Wesentlichen dieses Ich würde empfehlen, eine zusammengesetzte individuelle Steuerung für zu schaffen, was diesen HTML rendert. Sie sind ziemlich einfach zu machen, Google unter die Begriffe 'Composite Control asp.net'.

Das härteste Teil wird die div-Dimensionen an die der Auswahlbox anpassen, damit die Bildlaufleisten ordnungsgemäß funktionieren. Das ist, warum es ein bisschen schwierig ist.

Source

Werfen Sie auch einen Blick auf diese: Automatically Adding/Hide Horizontal Scroll bar in the ListBox control

EDIT: Stellen Sie sicher, dass Sie genügend Höhe haben die Bildlaufleiste Höhe aufzunehmen oder sonst werden Sie die vertikale Bildlaufleiste auf beide bekommen Kontrollen.

1

Wir können dieses Listenfeld in ein DIV setzen und den Stil für DIV auf Überlauf einstellen, der automatisch die Bildlaufleiste anzeigt, wann immer es notwendig ist.

Ihre aspx Seite hat folgende DIV:

<div id='hello' style="Z-INDEX: 102; LEFT: 13px; OVERFLOW: 
      auto; WIDTH: 247px; POSITION: absolute; TOP: 62px; HEIGHT: 134px" > 

Setzen Sie Ihre asp: listbox in der DIV-Definition. In der page_load-Funktion müssen Sie die Breite und Höhe des Listenfelds richtig definieren, damit es nicht mit dem DIV überläuft.

private void Page_Load(object sender, System.EventArgs e) 
{ 
    if (!IsPostBack) 
    { 

     int nItem = Convert.ToInt32(ListBox1.Items.Count * 17); 
     ListBox1.Height = nItem; 

     ListBox1.Width = 800; 

    } 
} 

-Code und verfügbare Lösung bei http://www.codeproject.com/KB/custom-controls/HorizontalListBox.aspx

+0

Ich liebe die Art, wie Sie eine andere Antwort assimiliert haben! –

0

Wenn Sie es für die Anzeige Zweck nur tun werden Sie können es auf andere Weise tun, indem Sie Textbox mit multilinearer Eigenschaft verwenden. Indem Sie den Text mit einer neuen Zeile anhängen!

List<Yourclass> result = null; 
    result = Objname.getResult(Parameter1, Parameter2); 
    foreach (Yourclass res in result) 
    { 
     txtBoxUser.Text += res.Fieldname1.ToString(); 
     txtBoxUser.Text += "\r\n" + res.Fieldname2.ToString(); 
     txtBoxUser.Text += "\n\n"; 
    } 

Daher werden Sie die Ansicht von mulitline Textbox mit allen Daten in einem guten Format angeordnet bekommen, wie oben Code (Neue Zeile und alle). Und es wird auch Ihre Texte umbrechen, wenn es die Breite Ihrer Textbox überschreitet. Sie brauchen sich auch nicht um die Scrollbalken zu kümmern, und hier erhalten Sie nur die vertikale Scrollleiste, da alle unsere Ergebnisse entsprechend dem Verhalten der Textbox umgebrochen wurden.

Verwandte Themen