SelectionList всегда возвращает NULL - PullRequest
0 голосов
/ 21 июля 2010

У меня очень странная проблема, когда SelectionList всегда возвращает NULL, когда я пытаюсь проверить выбранный элемент / значение.Я немного погуглил и обнаружил, что когда я нажимаю кнопку отправки, страница обновляется, и SelectionList снова привязывается к данным, поэтому он возвращается к своему первоначальному поведению.

Затем я попытался заключить код привязки в событие Page_Load в !IsPostBack, но все же, когда я пытаюсь получить доступ к свойству Selected, оно имеет значение null и выдается исключение.

AnyСправка будет принята с благодарностью.

Мой код выглядит примерно так ... (фигурные скобки не совпадают должным образом)

static SelectionList[] Symptoms;
static string UserID = "";

cmbSymptoms1, cmbSymptoms2, cmbSymptoms3 и cmbSymptoms4 являются списками выбора.Я взял их в массив SelectionList и затем установил свойства.

Мне пришлось сделать их статическими, иначе, когда я нажму кнопку для обновления, они не сохранят свои значения.Любая идея, почему они не сохраняют значения?

protected void Page_Load(object sender, EventArgs e)
{

if (this.IsPostBack == false)
        {
            //System.Diagnostics.Debug.WriteLine("Not IsPostBack");

            if (Request.QueryString["id"] != null && Request.QueryString.ToString() != "")
            {
                //System.Diagnostics.Debug.WriteLine("id query string is not null :- " + Request.QueryString["id"]);

                myclass = new Class1();

                UserID = Request.QueryString["id"];

                Symptoms = new SelectionList[4];

                Symptoms[0] = cmbSymptoms1;
                Symptoms[1] = cmbSymptoms2;
                Symptoms[2] = cmbSymptoms3;
                Symptoms[3] = cmbSymptoms4;

                System.Data.DataTable dt = myclass.getAllSymptoms();

                foreach (SelectionList listItem in Symptoms)
                {
                    listItem.DataSource = dt;
                    listItem.DataTextField = "symptomsname";
                    listItem.DataValueField = "symptomsid";
                    listItem.DataBind();
                    listItem.Items.Insert(0, new MobileListItem("None"));
                }

А в кнопке обновления щелчок по событию защищен void cmbUpdate_Click (отправитель объекта, EventArgs e) {

 foreach (SelectionList listItem in Symptoms)
        {
            if (listItem.SelectedIndex != 0)
            {
                cmd.CommandText = "INSERT INTO Patient_Symptom (patientid,symptomid) VALUES (" + UserID + ",'" + listItem.Selection.Value + "')";
                cmd.ExecuteNonQuery();
            }

        }   

}

1 Ответ

0 голосов
/ 21 июля 2010

Вы можете попробовать две вещи.Попробуйте поместить код привязки данных в событие PreRender.Вторым и лучшим вариантом будет использование элементов управления ObjectDataSource и декларативное связывание элемента управления.

...