3

このメソッドを作成したので、ページのLABELが更新されます。ここにあるのは、その人に制限があるかどうかを示す一連のチェックボックスです。ユーザーがログオンしてチェックボックスが表示されたら、チェックされているチェックボックスをラベルに表示して、ユーザーがユーザーの制限を簡単に確認できるようにします。

私はC#とASP.NETを初めて使用しますが、知りたいことは、これを実行するためのより良い/より簡単な/より効率的な方法はありますか?私が最初に見つけたのはString.Concatでした。そのため、以下のコードでそれを使用しました。また、コードビハインドで動作する行リターン(a(br /))を取得できないようです((br /)がコードビハインドで機能しないことは理解しています)。私は多くの異なる方法を試しましたが、どれもうまくいかないようです。そのため、文字列にカンマを入れました。助言がありますか?

protected void LblLimitsLabel()
{
    String strBend = "", strDryDust = "", strStanding = "", strHearing = "", strHeights = "", strHepatitis = "", strLifting = "", strMachines = "", strPulling = "", strPushing = "", strReaching = "", strSeizures = "", strSuddenTemp = "", strVisual = "", strWalking = "", strWheelchair = "", strHelmet = "", strOther = "";

   if (chkBend.Checked)
       strBend = "Bend/Stoop, ";

   if (chkDryDusty.Checked)
       strDryDust = "Dry/Dusty, ";

   if (chkHearing.Checked)
       strHearing = "Hearing, ";

   if (chkHeights.Checked)
       strHeights = "Heights, ";

   if (chkHepatitis.Checked)
       strHepatitis = "Hepatitis, ";

   if (chkLifting.Checked)
       strLifting = "Lifting, ";

   if (chkMachines.Checked)
       strMachines = "Machines, ";

   if (chkPulling.Checked)
       strPulling = "Pulling, ";

   if (chkPushing.Checked)
       strPushing = "Pushing, ";

   if (chkReaching.Checked)
       strReaching = "Reaching, ";

   if (chkSeizures.Checked)
       strSeizures = "Seizures, ";

   if (chkStanding.Checked)
       strStanding = "Standing, ";

   if (chkSuddenTemp.Checked)
       strSuddenTemp = "Sudden Temp. Changes, ";

   if (chkVisual.Checked)
       strVisual = "Visual, ";

   if (chkWalking.Checked)
       strWalking = "Walking, ";

   if (chkWheelchair.Checked)
       strWheelchair = "Wheelchair, ";

   if (chkHelmet.Checked)
       strHelmet = "Helmet, ";

   strOther = TextBox1.Text;

   LblLimits.Text = String.Concat(strBend, strDryDust, strStanding, strHearing, strHeights, strHepatitis, strLifting, strMachines, strPulling, strPushing, strReaching, strSeizures, strSuddenTemp, strVisual, strWalking, strWheelchair, strHelmet, strOther);
}
4

4 に答える 4

3
  1. StringBuilderを使用して文字列を作成します。AppendLineを使用して、新しい行を作成します。
  2. ifステートメントを1行に配置します。このようなステートメントを使用すると、簡単に読みやすくなります。
  3. ASP.NETラベルに新しい行を表示する必要がある場合は、<br/>タグを埋め込む必要があります。

    StringBuilder SB = new StringBuilder();
    
    if (chkBend.Checked) SB.AppendLine("Bend/Stoop, ");
    if (chkDryDusty.Checked) SB.AppendLine("Dry/Dusty, ");
    // and so on
    
    SB.Append(TextBox1.Text);
    LblLimits.Text = SB.ToString();
    

C#とASP.NETに慣れてきたら、CheckBoxListのようなデータバインドされたコントロールに移行することをお勧めします

参考文献

于 2013-03-01T19:09:27.440 に答える
1

はい、使用しない場合は、ツールチップなどのチェックボックスのプロパティの文字列に追加するテキストを設定できます。次に、このループを使用できます。

string s = "";
        foreach (Control item in this.Controls)
        {
            if (item is CheckBox)
            {
                CheckBox temp = item as CheckBox;
                if (temp.Checked)
                {
                    s += temp.ToolTip + ", ";
                }
            }
        }
s = s.Substring(0,s.length-3);

's'には必要な文字列があります。

于 2013-03-01T19:19:18.383 に答える
0

asp.netでCheckBoxListコントロールを試してください。ここでの例:http ://www.w3schools.com/aspnet/showasp.asp?filename = demo_checkboxlist

于 2013-03-01T19:11:17.587 に答える
0

より少ないラインコードを使用して同じ結果を達成できます。末尾の区切り文字を処理する必要がないため、この方法でリストを操作することを楽しんでいます。

var checkBoxes = new CheckBox[] {chkBend, chkDryDusty, chkHearing, ...}
var values = new string[] {"Bend/Stoop", "Dry/Dusty", "Hearing", ...}

var selectedEntries = new List<string>();

for(var i = 0; i < checkBoxes.Length; i++)
{
    if (checkBoxes[i].Checked)
        selectedEntries.Add(values[i]);
}

if (TextBox1.Text != "")
    selectedEntries.Add(TextBox1.Text);

LblLimits.Text = string.Join(", ", selectedEntries.ToArray());

コメントで提案されているように、複数のチェックボックスが最善の解決策だと思います。

改行が必要な場合:

LblLimits.Text = string.Join("<br/>", selectedEntries.ToArray());
于 2013-03-01T19:24:12.390 に答える