[英]asp.net C# Gridview contains data but only returning cell value = “”
我遇到以下问题。 我有一个ASP.NET Gridview,其中包含12列(每月一个),并且仅一行显示基于SQL查询与这些列匹配的“ double”类型的值。
在这里,我为您提供了执行查询以接收匹配数据的代码段。 如上图所示,这可以正常工作。
protected void LoadZusammenfassung()
{
List<string> tempList = new List<string>();
DataTable dt_zusammenfassung = new DataTable();
int countEmpty = 0;
//Erstellen der DataTable für die Monatszusammenfassung (12 Spalten)
for (int i = 1; i <= 12; i++)
{
dt_zusammenfassung.Columns.Add(i.ToString(), typeof(Double));
}
using(SqlConnection con = new SqlConnection(MDE_ConnectionString))
{
con.Open();
//Durchläuft die Monate 1-12 um die summierten Überstunden den einzelnen Spalten zuordnen zu können
for (int i = 1; i <= 12; i++)
{
_query_zusammenfassung = "SELECT SUM(Anz_ueberstunden) FROM ERP WHERE Month(Ueberstundendatum) = '" + i.ToString() + "'";
if (DDL_user.SelectedValue != "Alle Benutzer")
{
_query_zusammenfassung = _query_zusammenfassung + " AND UserName = '" + DDL_user.SelectedValue + "'";
}
if (DDL_year.SelectedValue != "Gesamter Zeitraum")
{
_query_zusammenfassung = _query_zusammenfassung + " AND YEAR(Ueberstundendatum) = '" + DDL_year.SelectedValue + "'";
}
using (SqlCommand cmd = new SqlCommand(_query_zusammenfassung, con))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
if (reader.HasRows)
{
if (reader[0] == null || reader[0] == DBNull.Value)
{
//tempList.Add("0.00");
}
else
{
tempList.Add(reader[0].ToString());
}
}
}
}
}
}
dt_zusammenfassung.Rows.Add(tempList.ToArray());
foreach(string item in tempList)
{
if(item == "" || item == DBNull.Value.ToString() || item == null)
{
countEmpty++;
}
}
if (countEmpty < 12)
{
gridView_zusammenfassung.DataSource = dt_zusammenfassung;
gridView_zusammenfassung.DataBind();
}
UpdatePanelZusammenfassung.Update();
}
}
在此之后,我想分析gridview中的数据以寻找一些标准,例如“任何大于20的值”。 这发生在gridview的DataBound事件中。
protected void gridView_zusammenfassung_DataBound(object sender, EventArgs e)
{
double CellValue;
foreach (GridViewRow row in gridView_zusammenfassung.Rows)
{
for (int i = 0; i < gridView_zusammenfassung.Columns.Count; i++)
{
string Value = row.Cells[i].Text;
//string Value = Convert.ToString(gridView_zusammenfassung.Rows[row.RowIndex].Cells[0].Text);
if (double.TryParse(Value, out CellValue))
{
if (CellValue > 20)
{
row.Cells[i].ForeColor = Color.Red;
row.Cells[i].Font.Bold = true;
}
}
//else if (string.IsNullOrEmpty(row.Cells[i].Text))
//{
// row.Cells[i].Text = "-";
//}
}
}
}
还有问题。 “ row.Cells [i] .Text”始终返回,并且为空字符串,例如“”。 我不知道这可能是什么。
-编辑-
我不知道是否有帮助,但这是Updatepanel中gridview的html部分
<%-- GridView Zusammenfassung --%>
<td style="padding-left:20px; padding-top:36px;">
<asp:UpdatePanel runat="server" ID="UpdatePanelZusammenfassung" UpdateMode="Conditional">
<ContentTemplate>
<div runat="server" class="gridview" style="overflow-y:hidden; width:1500px; display:inline;">
<asp:GridView runat="server" ID="gridView_zusammenfassung" AllowPaging="false" CssClass="table table-striped table-bordered table-hover" BackColor="White" BorderColor="#009933" AutoGenerateColumns="false" HeaderStyle-BackColor="Green" OnDataBound="gridView_zusammenfassung_DataBound">
<Columns>
<asp:TemplateField HeaderStyle-Height="57px" ItemStyle-Height="50px" HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Jan" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_jan" runat="server" Text='<%# Eval("1")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Feb" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_feb" runat="server" Text='<%# Eval("2")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Mär" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_mar" runat="server" Text='<%# Eval("3")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Apr" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_apr" runat="server" Text='<%# Eval("4")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Mai" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_mai" runat="server" Text='<%# Eval("5")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Jun" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_jun" runat="server" Text='<%# Eval("6")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Jul" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_jul" runat="server" Text='<%# Eval("7")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Aug" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_aug" runat="server" Text='<%# Eval("8")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Sep" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_sep" runat="server" Text='<%# Eval("9")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Okt" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_okt" runat="server" Text='<%# Eval("10")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Nov" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_nov" runat="server" Text='<%# Eval("11")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Dez" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_dez" runat="server" Text='<%# Eval("12")%>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
Keine Daten vorhanden.
</EmptyDataTemplate>
</asp:GridView>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</td>
我找到了这个问题的答案...
我有点傻:)
<asp:TemplateField HeaderStyle-Height="57px" ItemStyle-Height="50px" HeaderStyle-CssClass="GridLines2" Visible="true" ItemStyle-CssClass="GridLines2" FooterStyle-CssClass="GridLines2" HeaderText="Jan" HeaderStyle-Wrap="false" FooterStyle-Wrap="false" ItemStyle-Wrap="false" ItemStyle-Width="100px">
<ItemTemplate>
<asp:Label ID="lbl_jan" runat="server" Text='<%# Eval("Jan")%>' />
</ItemTemplate>
</asp:TemplateField>
在这一部分中,您可以看到我使用asp:labels保留我的值并处理它们。
因此,我之所以无法在单元格中接收这些值,只是因为它们从来没有在那里。 他们一直被保留在这些标签中。
我只需要使用以下行来查询所有这些标签
string CurrentLblValue = (gridView_zusammenfassung.Rows[row.RowIndex].FindControl("lbl_" + gridView_zusammenfassung.Columns[i].HeaderText.ToLower()) as Label).Text;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.