Получить первичный ключ по щелчку переключателя - PullRequest
0 голосов
/ 23 марта 2012

У меня есть несколько переключателей, которые динамически заполняются в форме, и я установил событие нажатия на динамически создаваемых переключателях.По щелчку я получаю возвращаемое значение следующим образом через отладку (например) «отправитель {Text =» это ответ один »+ Checked =« True »}, используя код следующим образом:

    //Radio button click:
    void Form1_Click(object sender, EventArgs e)
    {
        RadioButton rb = sender as RadioButton;
        string radioButtonValue = rb.Text;

        if (radioButtonValue != String.Empty)
        {

        }
    }

Значения отладкивозвращается через "RadioButton rb = sender as RadioButton;" - текст различных радиокнопок устанавливается через набор данных, который я вызываю в локальном наборе данных, который проходит по циклу через набор данных и соответственно устанавливает текст радиокнопки (например):

 for (int i = 0; i < _dataSetRadioButtons.Tables["tbl_QuestionnaireAnswer"].Rows.Count; i++)
                                    {
                                        radioButtons[i] = new RadioButton();
                                        radioButtons[i].AutoCheck = true;
                                        radioButtons[i].Text = _dataSetRadioButtons.Tables["tbl_QuestionnaireAnswer"].Rows[i]["tbl_QuestionnaireAnswer_Description"].ToString();
                                        radioButtons[i].Location = new System.Drawing.Point(60, 20 + i * 20);
                                        radioButtons[i].Click += new EventHandler(Form1_Click);
                                        panel.Controls.Add(radioButtons[i]);
                                    }

Итак: хотел бы узнать, что идентификатор id находится в событии щелчка переключателя (Form1_Click), возможно ли вернуть первичный ключ выбранного переключателя, который я выбрал, а не только отправителя {Text = "thisэто ответ один "+ Checked =" True "}, поскольку я хотел бы использовать первичную клавишу в этом наборе данных для обратной записи в мою базу данных.

Заранее спасибо. С уважением, geo

1 Ответ

1 голос
/ 23 марта 2012

Большинство элементов управления winforms содержат свойство Tag, которое используется для хранения пользовательских данных в элементе управления.Вы можете прочитать больше на: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag.aspx

Итак, ваше решение должно быть проще и более кратким, как это:

for (int i = 0; i < _dataSetRadioButtons.Tables["tbl_QuestionnaireAnswer"].Rows.Count; i++)
{
    radioButtons[i] = new RadioButton();
    radioButtons[i].AutoCheck = true;
    radioButtons[i].Location = new System.Drawing.Point(60, 20 + i * 20);
    radioButtons[i].Tag = _dataSetRadioButtons.Tables["tbl_QuestionnaireAnswer"].Rows[i];
    radioButtons[i].Click += new EventHandler(Form1_Click);
    panel.Controls.Add(radioButtons[i]);
}

Это включает в себя соответствующие данные в радиокнопке.Следующее, что вам нужно - это получить все необходимые данные:

//Radio button click:
void Form1_Click(object sender, EventArgs e)
{
    RadioButton radioButton = sender as RadioButton;
    if (radioButton == null)
       return;

    DataRow row = radioButton.Tag as DataRow;
    if (row == null)
       return;

    /* Post any processing here. e.g.
       MessageBox.Show(row["ID"].ToString());
    */
}

Таким образом, у вас есть все данные, и они строго типизированы, и это хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...