如何在asp.net gridview中显示固定的行数

时间:2016-01-20 02:57:29

标签: c# mysql asp.net gridview

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

我想要显示最多15行。它是数据库中的数据绑定,用户将填写所采用的主题(最多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 个答案:

答案 0 :(得分:0)

您的代码存在很多问题。

  

1)您的数据访问层不应该在同一个地方   DataBind the Grid

     

2)您不应该使用全局SqlConnection。连接池是你的   朋友。此外,如果发生异常,您的连接将永远不会被关闭。

     

3)您的查询应该使用sql参数来防止Sql注入。

     

4)你应该在使用语句中包装SqlDataAdapter,因此它将被处理掉   填充后。

如果我理解正确你想要在C#中出于某种原因用虚拟记录填充网格,当记录数小于15时,你可以像这样在fetch数据集中添加虚拟行。

        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连接,并且还使用{{阻止sql注入1}}。