直接取DataGrid的Cell的Text值出來比較時,要注意哦!
環境: ASP.NET 1.1, DataGrid
有朋友在取DataGrid的Cell值時發生了問題(資料位和空值)。
明明DB中的值是空值,但用變數去取出來判斷是否為空字串時,卻不等於空字串。
於是Debug了一下,發現它的值是 ,所以比較是不是等於空字串,一定為false!
以下為測試程式,
aspx中grid的內容
<asp:DataGrid style="Z-INDEX: 101; POSITION: absolute; TOP: 112px; LEFT: 192px" id="DataGrid1"
runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundColumn DataField="id" HeaderText="id"></asp:BoundColumn>
<asp:TemplateColumn HeaderText="idWithLabel">
<ItemTemplate>
<asp:Label ID="lblId" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.id") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
aspx.cs 中 Bind DataGrid
private void Page_Load(object sender, System.EventArgs e)
{
if(!Page.IsPostBack)
{
DataTable dt = new DataTable("dt");
dt.Columns.Add("id", typeof(System.DateTime));
dt.Rows.Add(new object[]{DBNull.Value});
this.DataGrid1.DataSource = dt;
this.DataGrid1.DataBind();
}
}
那解法方式有以下幾種,
1.直接判斷值是不是為 ,如下,
string way1 = DataGrid1.Items[0].Cells[0].Text;
if (way1 == " ")
{
Response.Write("way1 空值");
}
2.將 置換成空字串,如下,
string way2 = DataGrid1.Items[0].Cells[0].Text.Replace(" ", "");
if (way2 == "")
{
Response.Write("way2 空值");
}
3.用一個Label控制項去Bind值,然後取得Label控制項後,再取它的Text的值(筆者都是用這種方式),如下,
Label lbId = DataGrid1.Items[0].Cells[1].FindControl("lblId") as Label;
if(lbId != null)
{
string way3 = lbId.Text;
if (way3 == "")
{
Response.Write("way3 空值");
}
}
4.Server.HtmlDecode後,判斷值是否為 \u00A0 ,如下,
string way4 = Server.HtmlDecode(DataGrid1.Items[0].Cells[0].Text);
if(way4 == "\u00A0")
{
Response.Write("way4 空值");
}
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^