SelectionList 始终返回 NULL

发布于 2024-09-10 20:40:08 字数 2179 浏览 3 评论 0原文

我有一个非常奇怪的问题,当我尝试检查其选定的项目/值时,SelectionList 总是返回 NULL。我用 Google 搜索了一下,发现当我单击提交按钮时,页面正在刷新,并且 SelectionList 再次进行数据绑定,因此它将恢复到其原始行为。

然后我尝试将绑定代码包含在 !IsPostBack 中的 Page_Load 事件中,但当我尝试访问 Selected 属性时,它仍然为 null 并引发异常。

任何帮助将不胜感激。

我的代码是这样的...(大括号未正确匹配)

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"));
                }

并在更新按钮单击事件中 protected 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();
            }

        }   

}

I have a very strange issue where SelectionList always returns NULL when i try check its Selected Item/Value. I Googled a bit and I found out that when i click the submit button, the page is being refreshed and the SelectionList is being data bound again so it will revert back to its original behavior.

Then i tried enclosing the binding code in the Page_Load event in a !IsPostBack but still when i try to access the Selected property it is null and an exception is thrown.

Any help would be greatly appreciated.

My code goes something like this... (the braces are not matched properly)

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

cmbSymptoms1,cmbSymptoms2,cmbSymptoms3 and cmbSymptoms4 are SelectionLists. I took them in to an array of SelectionList and then set the properties.

I had to make them static or else when i click the button to update, they will not retain their values. Any idea why they don't retain the values?

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"));
                }

And in the update button click event
protected void cmbUpdate_Click(object sender, 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();
            }

        }   

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凝望流年 2024-09-17 20:40:08

你可以尝试两件事。尝试将数据绑定代码放置在 PreRender 事件中。第二个也是更好的选择是使用 ObjectDataSource 控件并以声明方式绑定该控件。

You can try two things. Try placing the databinding code in the PreRender event. The second and better option would be to use an ObjectDataSource controls and bind the control declaratively.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文