任何人都可以指导我一种方法来检查和替换strList中的空值与String消息"没有数据"或者在dtList中允许它们。 因为当我在此列表中遇到空值时,它会显示类似&#34的错误;位置上没有行..."
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#。 Plz,帮我修复这段代码或指导我解决它的方法。 提前谢谢。
@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]);
}
答案 0 :(得分:7)
您可以使用C#的null coalescing operator ?? :
string s = null;
s = s ?? "NO DATA";
// s now equals "NO DATA";
答案 1 :(得分:0)
使用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);
}
答案 2 :(得分:0)
因为你正在使用数据表我假设你不是在谈论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]);
}
答案 3 :(得分: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";
}
}
在没有修改过多程序结构的情况下,这是我可以做到的。