2

strList の null 値をチェックして文字列メッセージ「NO DATA」に置き換えるか、dtList で許可する方法を誰でも教えてくれます。このリストで null 値に遭遇すると、「位置に行がありません...」のようなエラーが表示されるためです。

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]);
}
4

4 に答える 4

8

C#のnull合体演算子を使用できます か?

string s = null;
s = s ?? "NO DATA";
// s now equals "NO DATA";
于 2012-05-16T06:52:24.090 に答える
1

データテーブルを使用しているので、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]);
    }
于 2012-05-16T06:56:27.777 に答える
0

String.IsNullOrEmptyを使用して、この方法で試してください。dataTableのセルを2倍にすると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);
    }
于 2012-05-16T06:54:17.500 に答える
0

エラーが「位置に行がありません...」の場合、問題は文字列がnullであるということではなく、データテーブルに存在しない行にアクセスしようとしているということだと思います.

特に、次の行で:

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";          
        }      
    } 

これは、プログラム構造をあまり変更せずにできる限りです。

于 2012-05-16T07:08:01.203 に答える