您的位置:首页 > 移动开发 > Objective-C

动态设置 GridView Web 服务器控件列宽

2007-05-04 11:48 363 查看
ASP.NET
如何:动态设置 GridView Web 服务器控件列宽

默认情况下,会自动调整 GridView 控件中列的大小。列将呈现为不含宽度信息的 HTML 表单元格(td 元素);大多数浏览器都会调整表单元格的大小以适应列中最宽的内容。

如果需要,您可以通过编程方式设置 GridView 控件中个别列的宽度。如果列的宽度取决于只在运行时提供的信息,则这种方式非常有用。例如,您可能要根据列的内容(即根据 GridView 控件绑定到的数据)调整列的大小。

设置列宽的基本方法包括设置列模板的 Width 属性。如果希望根据列的内容设置宽度,可以处理 RowDataBound 事件。这使得您可以检查行中的数据。

动态设置列宽
在代码中,将 GridView 控件列的 ItemStyle 属性的 Width 属性设置为所需的宽度。

下面的代码示例说明如何将 GridView1 控件中所有列的宽度设置为用户在文本框中输入的值。

Visual Basic
复制代码
Protected Sub Button1_Click(ByVal sender As Object, _
ByVal e As System.EventArgs)
Try
Dim colWidth As Integer
colWidth = CInt(Server.HtmlEncode(TextBox1.Text))
If colWidth > 0 Then
For i As Integer = 0 To GridView1.Columns.Count - 1
GridView1.Columns(i).ItemStyle.Width = colWidth
Next
End If
Catch
' Report error.
End Try
End Sub

C#
复制代码
protected void Button1_Click(object sender, EventArgs e)
{
try
{
int colWidth = Int16.Parse(Server.HtmlEncode(TextBox1.Text));
if (colWidth > 0)
{
for (int i = 0; i < GridView1.Columns.Count; i++)
{
GridView1.Columns[i].ItemStyle.Width = colWidth;
}
}
}
catch
{
// Report error.
}
}

根据数据内容设置列宽
创建 RowDataBound 事件的处理程序。

每次在网格中的新行绑定数据时,都会引发 RowDataBound 事件,而且该事件将授予您对每行中数据的访问权限。

在事件处理程序中,执行下列操作:

创建 DataRowView 对象并为其分配当前网格行的 DataItem 值。

DataItem 属性将被类型化为一个对象。因此,您必须强制转换该属性。

测试数据行 (DataControlRowType) 以确保您使用的是数据绑定行而不是页眉或页脚。

从 DataRowView 对象提取要检查的数据值。

设置 ItemStyle 属性的 Width 属性。

将 ItemStyle 属性的 Wrap 属性设置为 false。

如果 Wrap 属性为 false,则会自动调整列的大小。

下面的代码示例说明在设置某一列(在本例中为第三列)的宽度时如何根据上一列中最宽数据元素的宽度进行设置。将为 GridView 控件所显示的每个数据行调用一次 RowDataBound 事件处理程序。这段代码将最宽元素的字符数存储在受保护的页成员中,并将列的宽度设置为字符数乘以 30(任意乘数)。

Visual Basic
复制代码
Protected widestData As Integer
Protected Sub GridView1_RowDataBound(ByVal sender As Object, _
ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs)
Dim drv As System.Data.DataRowView
drv = CType(e.Row.DataItem, System.Data.DataRowView)
If e.Row.RowType = DataControlRowType.DataRow Then
If drv IsNot Nothing Then
Dim catName As String = drv(1).ToString()
Dim catNameLen As Integer = catName.Length
If catNameLen > widestData Then
widestData = catNameLen
GridView1.Columns(2).ItemStyle.Width = _
widestData * 30
GridView1.Columns(2).ItemStyle.Wrap = False
End If
End If
End If
End Sub

Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
widestData = 0
End Sub

C#
复制代码
protected int widestData;
protected void GridView1_RowDataBound(object sender,
GridViewRowEventArgs e)
{
System.Data.DataRowView drv;
drv = (System.Data.DataRowView)e.Row.DataItem;
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (drv != null)
{
String catName = drv[1].ToString();
Response.Write(catName + "/");

int catNameLen = catName.Length;
if (catNameLen > widestData)
{
widestData = catNameLen;
GridView1.Columns[2].ItemStyle.Width =
widestData * 30;
GridView1.Columns[2].ItemStyle.Wrap = false;
}

}
}
}

protected void Page_Load(object sender, EventArgs e)
{
widestData = 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息