J'ai un GridView qui utilise BoundField pour les colonnes. J'essaie de définir une largeur maximale pour ma colonne UserInfo
.
J'ai essayé de nombreuses façons, mais aucune d'entre elles ne fonctionne. Voici le code de mon GridView:
<asp:GridView ID="GridView1" AutoGenerateEditButton="True"
ondatabound="gv_DataBound" runat="server" DataSourceID="SqlDataSource1"
AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="UserId"
DataField="UserId"
SortExpression="UserId"></asp:BoundField>
<asp:BoundField HeaderText="Username"
DataField="Username"
SortExpression="Username"></asp:BoundField>
<asp:BoundField HeaderText="UserInfo"
DataField="UserInfo"
SortExpression="UserInfo"></asp:BoundField>
</Columns>
</asp:GridView>
Vous cherchez des suggestions sur la façon dont je peux définir la largeur d'une colonne spécifique, qui est ma colonne UserInfo
.
J'ai fait une petite démo pour toi. Montrer comment afficher un texte long.
Dans cet exemple, il existe une colonne Nom qui peut contenir un texte très long. boundField affichera tout le contenu dans une cellule de tableau et donc la cellule se développera selon les besoins (à cause du contenu)
Le TemplateField sera également rendu comme une cellule MAIS il contient un div qui limites le largeur de tout contet à par exemple 40px. Cette colonne aura donc une sorte de largeur max!
<asp:GridView ID="gvPersons" runat="server" AutoGenerateColumns="False" Width="100px">
<Columns>
<asp:BoundField HeaderText="ID" DataField="ID" />
<asp:BoundField HeaderText="Name (long)" DataField="Name">
<ItemStyle Width="40px"></ItemStyle>
</asp:BoundField>
<asp:TemplateField HeaderText="Name (short)">
<ItemTemplate>
<div style="width: 40px; overflow: hidden; white-space: nowrap; text-overflow: Ellipsis">
<%# Eval("Name") %>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Voici mon code de démonstration
public partial class gridViewLongText : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
#region init and bind data
List<Person> list = new List<Person>();
list.Add(new Person(1, "Sam"));
list.Add(new Person(2, "Max"));
list.Add(new Person(3, "Dave"));
list.Add(new Person(4, "TabularasaVeryLongName"));
gvPersons.DataSource = list;
gvPersons.DataBind();
#endregion
}
}
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public Person(int _ID, string _Name)
{
ID = _ID;
Name = _Name;
}
}
ajoutez HeaderStyle dans votre champ lié:
<asp:BoundField HeaderText="UserId"
DataField="UserId"
SortExpression="UserId">
<HeaderStyle Width="200px" />
</asp:BoundField>
La largeur peut être définie sur une colonne spécifique comme ci-dessous: Par pourcentages:
<asp:BoundField HeaderText="UserInfo" DataField="UserInfo"
SortExpression="UserInfo" ItemStyle-Width="100%"></asp:BoundField>
OR
Par pixel:
<asp:BoundField HeaderText="UserInfo" DataField="UserInfo"
SortExpression="UserInfo" ItemStyle-Width="500px"></asp:BoundField>
Cela va fonctionner pour toutes les situations tout en travaillant avec la largeur.
`<asp:TemplateField HeaderText="DATE">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("date") %>' Width="100px"></asp:Label>
</ItemTemplate>
</asp:TemplateField>`
<asp:GridView ID="GridView1" AutoGenerateEditButton="True"
ondatabound="gv_DataBound" runat="server" DataSourceID="SqlDataSource1"
AutoGenerateColumns="False" width="600px">
<Columns>
<asp:BoundField HeaderText="UserId"
DataField="UserId"
SortExpression="UserId" ItemStyle-Width="400px"></asp:BoundField>
</Columns>
</asp:GridView>