c# - 如何在asp.net gridview中显示固定数量的行

标签 c# mysql asp.net gridview

所以这里我在 ASP.NET 中连续有几个 GridView 。现在的问题是它不一致,有些 gridview 有 5 个数据,有些有 10 个数据。它看起来很难看,因为我需要打印。这很关键。

我想显示最多 15 行。它是来自数据库的数据绑定(bind),用户可以填写表格中的主题(最多 15 行)。如果任何行没有任何数据。它会将其保留为空白(请注意,数据库最多不会填充 15 行。仅填充用户输入的内容)。我做了一些研究,但只发现了一些可能相关的内容,但使用了 javascipt/更改给定的当前 SQL。我不允许在网站中使用任何 JavaScript(稍后支持将是一个问题)。因为我是实习生。 sql代码给我了。我只需要实现它。如何在 gridview 中显示固定数量的行?我可以在 gridview 中使用任何属性将空白空间填充到 15 行吗?

aspx 文件

<asp:GridView ID="GridViewResult" runat="server" AutoGenerateColumns="False" EmptyDataText="NO RECORD" Font-Size="Small"
                        GridLines="Both" CellPadding="1" Height="101px" Width="100%" ShowFooter="True">
                        <Columns>
                            <asp:TemplateField HeaderText="Subjects">
                                <ItemTemplate>
                                    <asp:Label ID="lbl" runat="server" Text='<%# Eval("Subjects") %>'></asp:Label>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center"  Width="25px"  />
                            </asp:TemplateField> 
                            <asp:TemplateField HeaderText="Grade">
                                <ItemTemplate>
                                    <asp:Label ID="lbl1" runat="server" Text='<%# Eval("Grade") %>'></asp:Label>
                                </ItemTemplate>
                                <ItemStyle HorizontalAlign="Center"  Width="25px"  />
                            </asp:TemplateField> 
                        </Columns>  
                        <HeaderStyle Font-Bold="True"  HorizontalAlign="Center" Height="40px"/>
                        <PagerStyle ForeColor="#8C4510" HorizontalAlign="Center" />
                        <FooterStyle HorizontalAlign="Center" />                           
                    </asp:GridView>

以及后面的代码

Protected void LoadgvResult1()
{
    SqlCommand cmdgvKep1 = new SqlCommand();
    cmdgvKep1.Connection = conn;
    cmdgvKep1.CommandType = CommandType.Text;
        cmdgvKep1.CommandText = " SELECT ROW_NUMBER() OVER(ORDER BY Grade ASC) AS Numb, Subjects, Grade ";
        cmdgvKep1.CommandText += " FROM Result_SMU ";
        cmdgvKep1.CommandText += " WHERE siri = '" + siri + "' ";
    conn.Open();

    SqlDataAdapter adaptergvKep1 = new SqlDataAdapter(cmdgvKep1);
    DataSet dsgvKep1 = new DataSet();

    adaptergvKep1.Fill(dsgvKep1, "Result_SMU");

    GridViewResult1.DataSource = dsgvKep1;
    GridViewResult1.DataBind();

    conn.Close();
}

最佳答案

您的代码存在很多问题。

1)Your data access layer should not be on the same place when you are DataBind the Grid

2)You should not use global SqlConnection. Connection pool is your friend. Also if exception occurs your connection will never be closed.

3)Your query should use sql parameters to prevent from Sql Injection.

4) You should wrap SqlDataAdapter in using statement, so it will be disposed after Fill.

如果我理解正确的话,当记录数低于 15 时,由于某种原因,您希望在 C# 中用虚拟记录填充网格,您可以像这样向获取数据集添加虚拟行。

        int countRows = dsgvKep1 .Tables[0].Rows.Count;
        int dummyRecords = 0;

        if(countRows < 15)
        {
            dummyRecords = 15 - countRows;
        }

        for (int i = 0; i < dummyRecords; i++)
        {
            DataTable tbl = dsgvKep1.Tables[0];
            DataRow row = tbl.NewRow();

            //add dummy values if you want
            //row["ColumnName"] = value;
            tbl.Rows.Add(row);
        }

我建议你修正我给你的 4 个提示。据我所知,你是实习生,从长远来看这对你有好处。

我在这个问题中写了如何创建一个简单的数据访问层:checking user name or user email already exists ,这里可以看到数据层,配置了sqlDataAdapter,防止出现异常时不关闭sql连接,还可以使用SqlComand.Parameters防止sql注入(inject)。

关于c# - 如何在asp.net gridview中显示固定数量的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34890770/

相关文章:

c# - 在所有子目录中查找具有特定扩展名的文件数

mysql - 搜索左连接 null

java - MySQL、Java 和 UTF8

mysql - MySql中的跨表更新查询

c# - 是否可以*仅**跨子域共享表单例份验证?

asp.net - 如何在 EntityDataSource 中使用 CASE 语句进行排序?

c# - Gridview DataSource 有行,但 GridView 没有

c# - 使用标记的 GridView 行号(仅限)

javascript - 如何在 ASP MVC 设置中将 AngularJS 中的变量从一个 Controller 传递到下一个 Controller ?

c# - 如何用 LINQ 替换嵌套循环 - 以一种干净、可管理的方式