[ASP.NET]取DataGrid的Cell的Text值,DB中沒有值,但實際它的值是  

直接取DataGrid的Cell的Text值出來比較時,要注意哦!

環境: ASP.NET 1.1, DataGrid

有朋友在取DataGrid的Cell值時發生了問題(資料位和空值)。

明明DB中的值是空值,但用變數去取出來判斷是否為空字串時,卻不等於空字串。

於是Debug了一下,發現它的值是   ,所以比較是不是等於空字串,一定為false!

image

以下為測試程式,

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.直接判斷值是不是為 &nbsp; ,如下,

string way1 = DataGrid1.Items[0].Cells[0].Text;
if (way1 == "&nbsp;") 
{
	Response.Write("way1 空值");
}

 

2.將 &nbsp; 置換成空字串,如下,

string way2 = DataGrid1.Items[0].Cells[0].Text.Replace("&nbsp;", "");
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 空值");
}

image

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^