Das Datagrid ist eien feine Sache, aber wenns ins Detail geht, tauchen oft Fragen auf wie : wie kann ich die Breite der Spalten (zb Textbox) festlegen?
Zunächst einmal muss die Automatik abgedreht werden mit dem Attribut Autogenerate oder über den Datagrid Assistenten und die Checkbox "Spalten automatisch zur Laufzeit erstellen".
<asp:DataGrid id="DataGrid1" runat="server"
AutoGenerateColumns="False"> |
Dann muss man natürlich die Spalten manuell erzeugen. Dafür gibt es zwei Möglichkeiten die Bound Columns oder die Template Columns.
Wir beginnen einmal mit den Code etwas kürzeren Bound Columns. Der Ansatz ist, die Breite einfach über die Breite der Kopf Zeile einzustellen. Die Tabellespalte ist so immer so breit wie die erste Spalte. Das kann man auch über den Assistenten sehr einfach machen.
Damit wird in der ASPX Seite folgender HTML COde erzeugt. Hier kann man auch gleich noch ein paar andere Formatierungen mitgeben wie Zentrierung.
<HeaderStyle HorizontalAlign="Center" Width="300px" VerticalAlign="Middle"></HeaderStyle> |
Abweichend von der Überschrift kann über die Attribute der Boud Column auch Einfluss auf Design genommen werden. So könntenman eine Style Klasse laden in der die Definiton der Breite steckt oder einfach über das Zusatzelement Itemstyle.
<asp:BoundColumn HeaderText="Zwei"> <HeaderStyle Width="100px"></HeaderStyle> <ItemStyle Width="600px"></ItemStyle> </asp:BoundColumn> |
Im nächsten Schritt kann auch das Design (Breite) von Textboxen oder anderen Controls im Edit Modus geändert werden. So ist es auch möglich mehr als ein Control in einer Spalte abzulegen, aber nur mit Template COntrols. Am einfachsten geht es über den Assistenten aus einer Bound Column eine Template Column zu machen. Dies finden Sie im Eigenschaftsgenerator als Hyperlink unten "Konvertiert die Spalte in eine Vorlagenspalte"
Dann kann mit den üblichen Attributen der Controls das Deisgn erstellt werden.
<asp:TemplateColumn HeaderText="Zwei"> <ItemTemplate> <asp:Label runat="server"></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox runat="server" width="600" maxlength="600"></asp:TextBox> </EditItemTemplate> </asp:TemplateColumn> |
Wenn man diese Entscheidungen nicht dem Designer überlassen möchte, oder je nach Daten die Formatierung vornehmen will, muss man zur Laufzeit die Breite setzen.
Dazu kann man sich in verschiedenen Events des Datagrids einklinken wie z.B. ItemCreated oder Itemdatabound. Dort holt man sich dann die Textbox per Findcontrol oder Index und setzt einfach die Breite.
Private Sub DataGrid1_PreRender(s As Object, e As EventArgs) If DataGrid1.EditItemIndex > -1 Then Dim tbx As TextBox tbx = CType(DataGrid1.Items(DataGrid1.EditItemIndex).Cells(0).Controls(0), TextBox) tbx.Width = Unit.Parse("1cm") End If End Sub |