GRIDVIEW 动态更改单元格或行字体

问题描述 投票:0回答:1

使用“网格视图”

我通过包含 91 种不同字体名称的数据集填充了 gridview(不是 datagridview)。

Gridview 有两列。
第 0 列的所有 91 行中都有文本“TEST TEXT”。
第 1 列包含字体名称。 当 gridview 加载时,我希望使用 col1 中的字体显示 col 0 中的“测试文本” 我已经通过单步执行代码验证了数据集具有正确的字体,并且可以看到 col2 中的名称

我没有成功使用此代码更改字体。

 For Each ros As GridViewRow In GVfonts.Rows
 fontnameis = Replace(GVfonts.Rows(I).Cells(1).Text, ".otf", "")
 GVfonts.RowStyle.Font.Name = (fontnameis)
 GVfonts.Rows(I).Cells(0).Text = "Sample Text"
 GVfonts.Rows(I).Cells(0).Width = 150
 GVfonts.Rows(I).Height = 40
 GVfonts.Rows(I).Cells(0).Font.Size = 12
 I = I + 1

下一个

任何帮助将不胜感激

谢谢你

使用新信息进行编辑

        <div>
        <asp:GridView ID="GridView1" runat="server" datakeys="ID" AutoGenerateColumns="false" CssClass="table table-hover" Width="30%">
            <Columns>
                <asp:TemplateField HeaderText="Text">
                    <ItemTemplate>
                        <asp:Label ID="lblText" runat="server" Text='<%# Eval("TestText") %>' Font-Size="14" />
                    </ItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Font">
                    <ItemTemplate>
                        <asp:Label ID="lblFont" runat="server" Text='<%# Eval("Font") %>' Font-Size="14" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </div>

     If Not IsPostBack Then
     Dim DSFONTS As DataSet = GetDS("Select 'TestText' as TestText, fontname as font from fonts order by fontname")
     GridView1.DataSource = DSFONTS
     GridView1.DataBind()
 End If

 ' Grabfonts()

结束子

Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) 处理 GridView1.RowDataBound 如果 e.Row.RowType = DataControlRowType.DataRow 那么

     Dim lblFont As Label = e.Row.FindControl("lblFont")
     Dim lblText As Label = e.Row.FindControl("lblText")

     lblText.Style.Add("font-family", $"'{lblFont.Text}'")

 End If

结束子

我对你的代码唯一改变的是字体大小。我验证了我的数据集已正确填充。似乎找不到我错过了什么

asp.net vb.net gridview webforms
1个回答
0
投票

作为一般规则,为了格式化网格视图的行,首选事件是使用行数据绑定事件。那么,比如设置控件的颜色、行计算或其他什么?行数据绑定事件相当不错,因为它还可以使用数据源中的所有列,甚至可以自由使用不在 GridView 标记中的列。因此,您可以有一些列设置给定行的颜色,但您不必在 GridView 标记中显示或包含该列。

所以,假设这个数据表:

身份证 测试文本 字体
1 测试文本 Arial 黑色
2 测试文本 卡利布里
3 测试文本 快递新
4 测试文本 9 件免费 3 件
5 测试文本 吉吉
6 测试文本 非正式罗马语
7 测试文本 OCR A 扩展版
8 测试文本 宋体

所以,我们的 GridView 标记:

<asp:GridView ID="GridView1" runat="server"
    datakeys="ID" AutoGenerateColumns="false"
    CssClass="table table-hover"  Width="30%">

    <Columns>
        <asp:TemplateField HeaderText="Text">
            <ItemTemplate>
                <asp:Label ID="lblText" runat="server" 
                    Text='<%# Eval("TestText") %>'
                    Font-Size="16" />
            </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="Font">
            <ItemTemplate>
                <asp:Label ID="lblFont" runat="server" 
                    Text='<%# Eval("Font") %>'
                    Font-Size="16" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>

</asp:GridView>

加载 GridView 的代码如下:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If Not IsPostBack Then

        Dim strSQL =
            "SELECT * FROM tblFontFun
             ORDER BY ID"
        GridView1.DataSource = MyRst(strSQL)
        GridView1.DataBind()
    End If

End Sub

Protected Sub GridView1_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowDataBound

    If e.Row.RowType = DataControlRowType.DataRow Then

        Dim lblFont As Label = e.Row.FindControl("lblFont")
        Dim lblText As Label = e.Row.FindControl("lblText")

        lblText.Style.Add("font-family", $"'{lblFont.Text}'")

    End If

End Sub

结果是这样的:

编辑:必须加载字体。

当然,另一个问题是此类字体很可能无法在客户端计算机上安装和使用。因此,您需要确保加载此类字体。

假设我到处寻找并找到了一种“计算器”字体。

所以,我现在可以在我的字体文件夹中添加以下字体:

好的,现在在该页面上,我需要包含该字体。

因此,我有这个:

    <title></title>

    <link href="../Content/bootstrap.css" rel="stylesheet" />
    <script src="../Scripts/jquery-3.6.4.js"></script>
    <script src="../Scripts/bootstrap.js"></script>


    <style type="text/css">
     @font-face
     {
          font-family: 'myCalculator';
          src: url('../fonts/Calculator.ttf');
     }
</style>

所以,现在在标记中,我可以得到这个:

            <asp:Label ID="lblTime" runat="server" Text="123456789" 
            style="font-size:32px;font-family:myCalculator;
                font-weight:bold;color:red;
                border-style:solid;
                border-color:black;padding:4px"        
               >
            </asp:Label>

现在的结果是这样的:

© www.soinside.com 2019 - 2024. All rights reserved.