2011-02-07 52 views
0

您好我想設置我的文本框和按鈕可見性爲true,當我從下拉列表中選擇「其他」。我怎麼做?xml數據綁定後,文本框的可見性不起作用

我後面的代碼

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>[email protected]</value> 
    </builder> 
    <builder> 
     <id>2</id> 
     <value>Others</value> 
    </builder> 
    </builderemail> 
    <manageremail> 
    <manager> 
     <id>1</id> 
     <value>[email protected]</value> 
    </manager> 
    <manager> 
     <id>2</id> 
     <value>Others</value> 
    </manager> 
    </manageremail> 
</email> 

回答

1

的問題是不是在Page_Load中可見狀態切換代碼,但最好是通過 作爲@Shoban建議,以將可見狀態切換代碼放在裏面

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

或更好設置可見p標記中每個控件的屬性。

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

但問題是與下面的方法:

難道是射擊?如果未啓用頁面上的視圖狀態/下拉列表 如果它正在觸發,您寫入的代碼將不起作用。因爲,的SelectedValue被映射到「ID」字段中的填充方法

DropDownList1.DataValueField = "id"; 

,但在下面的代碼,你在DataTextField檢查(「值」列)

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; 
} 
+0

thanks vijay:D解決了我的疑問 – jeremychan 2011-02-07 08:48:51