所以这里我在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();
}
答案 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}}。