после связывания XML-данных видимость текстового поля не работает - PullRequest
0 голосов
/ 07 февраля 2011

привет, я хочу установить для моего текстового поля и видимости кнопки значение true, когда я выбираю «Другие» в раскрывающемся списке.Как мне это сделать?

мой код

    using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TextBox1.Visible = false;
        Button1.Visible = false;
        TextBox2.Visible = false;
       Button2.Visible = false;
        if (!IsPostBack)
        {
            PopulateDDLFromXMLFile();
        }
    }
    protected void TextBox1_TextChanged(object sender, EventArgs e)
    {

    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {

        if (DropDownList1.SelectedValue == "Others")
        {
            TextBox1.Visible = true;
            Button1.Visible = true;
        }

    }
    protected void TextBox3_TextChanged(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {

    }
    protected void TextBox2_TextChanged(object sender, EventArgs e)
    {
        if (DropDownList2.SelectedValue == "Others")
        {
            TextBox2.Visible = true;
            Button2.Visible = true;
        }
    }
    protected void XmlDataSource1_Transforming(object sender, EventArgs e)
    {

    }
    protected void TextBox3_TextChanged1(object sender, EventArgs e)
    {

    }
    public void PopulateDDLFromXMLFile()
    {
        DataSet ds = new DataSet();
        ds.ReadXml(MapPath("~/App_Data/builderemail.xml"));

        //get the dataview of table "Country", which is default table name
        DataView dv = ds.Tables["builder"].DefaultView;
        DataView dw = ds.Tables["manager"].DefaultView;
        //or we can use:
        //DataView dv = ds.Tables[0].DefaultView;

        //Now sort the DataView vy column name "Name"
        dv.Sort = "value";

        //now define datatext field and datavalue field of dropdownlist
        DropDownList1.DataTextField = "value";
        DropDownList1.DataValueField = "ID";
        DropDownList2.DataTextField = "value";
        DropDownList2.DataValueField = "ID";

        //now bind the dropdownlist to the dataview
        DropDownList1.DataSource = dv;
        DropDownList1.DataBind();
        DropDownList2.DataSource = dw;
        DropDownList2.DataBind();

    }
}

мой XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<email>
  <builderemail>
    <builder>
      <id>1</id>
      <value>builder@xyz.com</value>
    </builder>
    <builder>
      <id>2</id>
      <value>Others</value>
    </builder>
  </builderemail>
  <manageremail>
    <manager>
      <id>1</id>
      <value>manager@xyz.com</value>
    </manager>
    <manager>
      <id>2</id>
      <value>Others</value>
    </manager>
    </manageremail>
</email>

1 Ответ

1 голос
/ 07 февраля 2011

Проблема не в коде переключения состояния Visible в Page_Load, но желательно как предложено @Shoban, поместить код переключения состояния Visible в

if(!IsPostback) { //set the visible state to false; }

или лучше установите свойство Visible каждого элемента управления в разметке.

<asp:TextBox ID='TextBox1' runat="server" Visible="false">
    </asp:TextBox>

Но проблема в следующем методе:

Это стрельба? Если нет, включите viewstate на вашей странице / в выпадающем списке Если это стреляет, код, который вы написали, не будет работать. Потому что SelectedValue отображается в поле "id" в вашем методе Populate

DropDownList1.DataValueField = "id";

но в приведенном ниже коде вы проверяете DataTextField (столбец "value")

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {

        if (DropDownList1.SelectedValue == "Others")
        {
            TextBox1.Visible = true;
            Button1.Visible = true;
        }

    }

изменить чек:

if (DropDownList1.SelectedItem.Text.Equals("Others", StringComparison.Ordinal))
{
    TextBox1.Visible = true;
}
...