[英]How to check and replace null value in C#
任何人都可以指導我一種方法,用字符串消息“ NO DATA”檢查並替換strList中的空值,或者在dtList中允許它們。 因為當我在此列表中遇到空值時,它會顯示類似“在位置上沒有行...”的錯誤。
private DataTable getSomething1(String text){
DataTable dtb = new DataTable();
...
...
return dtb;
}
...
protected void buttonCheck_Click(object sender, ImageClickEventArgs e){
List<DataTable> strList = new List<DataTable>(){
getSomething(txtInput.Text),
getSomething2(txtInput.Text),
getSomething3(txtInput.Text),
...
};
}
我在Webform中使用了C#。 請幫助我修復此代碼或為我提供解決方法。 提前致謝。
@ tech,@ riffnl:終於我得到了您的所有想法,並且現在真的可以工作了。 Anw,感謝所有專業人士的建議。 所以,這是我的解決方案^^
private String ConvertNullToEmptyString(DataTable element)
{
if (element.Rows.Count > 0) //just add this condition here
{
if (!DBNull.Value.Equals(element.Rows[0]["FullName"]))
return (string)element.Rows[0]["FullName"] + " ";
else
return String.Empty;
}
return "NO DATA";
}
protected void ....(){
List<DataTable> strList = new List<DataTable>(){
GetItem1(txtName.Text), //private DataTable GetItem1(String t)
GetItem2(txtName.Text), //...
};
txtGrD_D.Text = ConvertNullToEmptyString(strList[0]);
txtGrM_D.Text = ConvertNullToEmptyString(strList[1]);
}
您可以使用C#的空合並運算符 ?? :
string s = null;
s = s ?? "NO DATA";
// s now equals "NO DATA";
通過使用String.IsNullOrEmpty嘗試這種方式。 我將dataTable中的單元格加倍可以為null。
//creating an example table with one row (no data inisde):
DataTable table = new DataTable();
table.Columns.Add("FullName", typeof(string));
table.Rows.Add("");
string str = ConvertNullToEmptyString(table);
//method to check for string:
private String ConvertNullToEmptyString(DataTable element)
{
String s = element.Rows[0]["FullName"].ToString();
return (string.IsNullOrEmpty(s) ? "NO DATA" : s);
}
由於您使用的是數據表,所以我假設您不是在談論NULL(或nill),而是DBNull。.像下面這樣更改您的函數ConvertNullToEmptyString:
private String ConvertNullToEmptyString(DataTable element){
if (element.Rows[0]["Fullname"] == DBNull.Value || element.Rows[0]["Fullname"] == null) {
return "NO DATA";
} else {
return element.Rows[0]["Fullname"].ToString();
}
}
根據要求:新樣品;
// a list of datatables each containing 1 row, wasn't that the point of datatables
// anyway -- I think you don't have any rows, so let's try this:
private String ConvertNullToEmptyString(DataTable element)
{
if (element.Rows.Count == 0)
{
return "NO DATA";
}
if (element.Rows[0]["Fullname"] == DBNull.Value || element.Rows[0]["Fullname"] == null)
{
return "NO DATA";
}
else
{
return element.Rows[0]["Fullname"].ToString();
}
}
protected void Test()
{
List<DataTable> strList = new List<DataTable>(){
GetItem("test1"), //private DataTable GetItem1(String t)
GetItem("test2") //...
};
txtGrD_D.Text = ConvertNullToEmptyString(strList[0]);
}
如果錯誤是“位置上沒有行...”,那么我想該探查不是不是字符串為空,而是嘗試訪問數據表中不存在的行。
特別是在這一行:
String s = element.Rows[0]["FullName"].ToString();
您嘗試訪問數據表的第一行。 如果數據表為空怎么辦? 你得到一個錯誤! 因此,您應該檢查數據表是否包含具有以下內容的行:
if (element.Rows.Count >0)
回答您的評論:是的,我們可以。 修改您的:
foreach (DataTable element in strList)
變成類似:
foreach (DataTable element in strList)
{
if (element.Rows.Count>0)
{
if(strList.Any(item => item == null))
{
ConvertNullToEmptyStringelement);
}
txtItem1.Text = mytext ;
.....
}
else
{
txtItem1.Text = "No Data";
}
}
據我所知,無需過多修改程序結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.