2013-03-01 2 views
3

Я создал этот метод, чтобы он обновил LABEL на странице. Здесь у нас есть набор флажков, указывающих, есть ли у человека какие-либо ограничения. Когда пользователь входит в систему и видит флажки, я хочу, чтобы на ярлыке отображались те, которые были проверены, что упростило пользователю возможность узнать, какие ограничения у пользователя есть.Есть ли лучший способ сделать это? ASP.NET/C#/Code Behind

Я новичок в C# и ASP.NET, и что я хочу знать, есть ли лучший/более простой/более эффективный способ обойти это? Первое, что я нашел, это String.Concat, поэтому я использовал его в приведенном ниже коде. Кроме того, я не могу получить возврат строки (a (br /)) для работы в коде (я понимаю, что (br /) не будет работать в коде позади). Я пробовал много разных методов, и ни один из них не работает, поэтому я ввел COMMA в строку. Какие-либо предложения?

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); 
} 
+0

Что именно ваш вопрос? –

+0

Я ищу более эффективный способ сделать это. Каков наилучший способ для программиста сделать это. Похоже, я получил несколько ответов ниже. Мне также было интересно, как получить разрыв строки между словами .. – user1911069

ответ

3
  1. Используйте StringBuilder для создания строки. Используйте AppendLine для создания новой строки.
  2. Поместите свои операторы if на одну строку. Это будет легче читать короче, если такие утверждения будут такими.
  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, я предлагаю перейти к элементу управления DataBound как CheckBoxList

Ссылки

+0

, что также делает его вопрос о перерыве строки, легко связанным с построителем строк, возможно, добавьте разрыв строки в SB.Append() ?? так как он действительно хотел это вместо запятой –

+0

Хорошая мысль, я добавил предложение использовать AppendLine, если он сочтет это подходящим –

+0

Я смущен о вложении тегов
. Я не могу сделать это в коде, не так ли? В идеале я хочу, чтобы каждый элемент был указан в новой строке. Мне очень нравится этот подход. – user1911069

1

Да, вы можете установить текст, который вы хотите добавить к своей строке, в свойствах CheckBox, например ToolTip, если вы не используете его. Затем вы можете использовать этот цикл:

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» содержит строку, которую вы хотите;

+0

Проблема в целом с составлением списка с использованием конкатенации заключается в том, что нам приходится иметь дело с последним трейлинг-разделителем. – Larry

+0

@Laurent Нет, вы можете подстроить() результат в конце –

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()); 
+0

Спасибо. Я тоже попытаюсь это сделать. Чем больше я знаю, тем лучше. – user1911069

Смежные вопросы