2016-01-20 32 views
0

所以在这里,我在asp.net中有一行gridviews。现在的问题是不一致的地方,一些gridview有5个数据,有些会有10个。它看起来很丑,因为我需要打印。这很关键。如何在asp.net中显示固定的行数gridview

我想显示最多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(); 
} 
+0

你正在寻找分页?如果是这样的话,你可以设置'AllowPaging =“True”'。 –

+0

不,我不寻找分页。我需要它在一页中显示所有内容,因为它用于打印。像15行盒/数据一样,如果没有数据,用空白填充空行。 – idwell

+0

尝试过滤datasource,'dsgvKep1.Tables [0] .Rows.Cast ()。拿(15);' –

回答

0

有很多与你的代码的问题。

1)你的数据访问层不应该在同一个地方,当你 的DataBind网格

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

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

4)你应该在使用语句中包装SqlDataAdapter,所以它将在Fill后处理 。

如果我理解正确的话,你要填充与伪记录电网由于某种原因,在C#时的记录数是在15,你可以添加虚拟行这样的获取数据集。

 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注入攻击。

+0

首先。感谢您的建议。当我有额外的时间时,我可能会解决它。针对当前的问题。它仍然显示5行数据。我在这里做错了什么?我添加了在数据绑定之后和关闭连接之前给出的代码 – idwell

+0

如果数据集有15条记录,则将其放入DataSource中时,请检入调试。 – mybirthname

相关问题