Динамическое заполнение RadiobuttonList

У меня довольно много списков радиокнопок в моей веб-форме ASP.net. Я динамически связываю их, используя метод, показанный ниже:

public static void PopulateRadioButtonList(DataTable currentDt, RadioButtonList currentRadioButtonList, string strTxtField, string txtValueField,
            string txtDisplay)
        {
            currentRadioButtonList.Items.Clear();
            ListItem item = new ListItem();
            currentRadioButtonList.Items.Add(item);
            if (currentDt.Rows.Count > 0)
            {
                currentRadioButtonList.DataSource = currentDt;
                currentRadioButtonList.DataTextField = strTxtField;
                currentRadioButtonList.DataValueField = txtValueField;
                currentRadioButtonList.DataBind();
            }
            else
            {
                currentRadioButtonList.Items.Clear();
            }
        }

Теперь я хочу отображать только первую букву DataTextField для текста элемента RadioButton.

Например, если значение хорошее, я просто хочу отобразить G. Если оно удовлетворительное, я хочу отобразить F.

Как мне это сделать на С#

Спасибо


person acadia    schedule 12.10.2010    source источник


Ответы (2)


Вы не можете делать то, что хотите, когда делаете привязку, поэтому у вас есть 2 варианта:

  1. Измените данные, полученные из таблицы, перед выполнением привязки.

  2. После привязки просмотрите каждый элемент и измените его текстовое поле.

Итак, если вы хотите отобразить «только первую букву DataTextField для текста элемента RadioButton», вы можете сделать:

currentRadioButtonList.DataSource = currentDt;
currentRadioButtonList.DataTextField = strTxtField;
currentRadioButtonList.DataValueField = txtValueField;
currentRadioButtonList.DataBind();

foreach (ListItem item in currentRadioButtonList.Items) 
    item.Text = item.Text.Substring(0, 1);

Если я вас неправильно понял, и вы хотите отобразить первую букву поля «Значение», вы можете заменить последние две строки на:

foreach (ListItem item in currentRadioButtonList.Items) 
    item.Text = item.Value.Substring(0, 1);
person Dan Dumitru    schedule 12.10.2010
comment
Дэн Извините, это не работает. Значение strTxtField равно VAL_ID, поэтому для всех значений отображается V. Где VAL_ID — это поле таблицы базы данных, а не фактическое значение. - person acadia; 12.10.2010
comment
@acadia - я не совсем понимаю, что ты говоришь. С вашим исходным кодом (то есть без моего foreach) вы получаете VAL_ID для всех значений в RadioButtonList? - person Dan Dumitru; 12.10.2010

Вы можете добавить свойство к привязываемому типу (тот, который содержит Good, Fair и т. д.) и привязать к этому свойству. Если вы всегда будете использовать первую букву, вы можете сделать это так (конечно, добавив нулевые проверки):

    public string MyVar { get; set; }

    public string MyVarFirstChar
    {
        get { return MyVar.Substring(0, 2); }
    }
person Mark Avenius    schedule 12.10.2010