2012-10-04 28 views
2

我新的ASP.NETASP.NET C# - 下拉列表中,通過使用用戶控制

有人在這個論壇上幫我如何得到下拉列表工作問心無愧用戶countrol和其工作正常。

在我的用戶控制文件VendorListControl.ascx中,我有下面的代碼。請假設VendorListControl.ascx.cs正常工作,這是我選擇VendorName時,它會觸發「ddlVendor_SelectedIndexChanged」刷新「ddlVendorBUList」下拉列表。

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="VendorListControl.ascx.cs" Inherits="MyNamespace.VendorListControl" %> 
<asp:DropDownList runat="server" ID="ddlVendorList" onselectedindexchanged="ddlVendor_SelectedIndexChanged" AutoPostBack="True" /> 
<asp:DropDownList runat="server" ID="ddlVendorBUList" AutoPostBack="True" /> 
<asp:Label runat="server" ID="lblMessage" /> 

我VendorListControl.ascx.cs代碼:

using System; 
using System.Configuration; 
using System.Data; 
using System.Data.SqlClient; 

namespace MyNamespace 
{ 
    public partial class VendorListControl : System.Web.UI.UserControl 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       FillVendors(); 
      } 
     } 

     protected void ddlVendor_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      int VendorID = Convert.ToInt32(ddlVendorList.SelectedValue.ToString()); 
      FillVendorBU(VendorID); 
     } 

     private void FillVendors() 
     { 
      string strConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
      System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(strConn); 

      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = conn; 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "SELECT VendorID, VendorName FROM MDF_Vendor"; 

      DataSet objDs = new DataSet(); 
      SqlDataAdapter dAdapter = new SqlDataAdapter(); 
      dAdapter.SelectCommand = cmd; ; 
      conn.Open(); 
      dAdapter.Fill(objDs); 
      conn.Close(); 

      if (objDs.Tables[0].Rows.Count > 0) 
      { 
       this.ddlVendorList.DataSource = objDs.Tables[0]; 
       this.ddlVendorList.DataTextField = "VendorName"; 
       this.ddlVendorList.DataValueField = "VendorID"; 
       this.ddlVendorList.DataBind(); 
       this.ddlVendorList.Items.Insert(0, "-- Select --"); 
      } 
      else 
      { 
       this.lblMessage.Text = "No Vendor Found"; 
      } 
     } 

     private void FillVendorBU(int VendorID) 
     { 
      string strConn = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; 
      SqlConnection con = new SqlConnection(strConn); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = con; 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "SELECT VendorBUID, VendorBUName FROM dbo.MDF_VendorBU WHERE VendorID = @VendorID"; 
      cmd.Parameters.AddWithValue("@VendorID", VendorID); 
      DataSet objDs = new DataSet(); 
      SqlDataAdapter dAdapter = new SqlDataAdapter(); 
      dAdapter.SelectCommand = cmd; 
      con.Open(); 
      dAdapter.Fill(objDs); 
      con.Close(); 
      if (objDs.Tables[0].Rows.Count > 0) 
      { 
       ddlVendorBUList.DataSource = objDs.Tables[0]; 
       ddlVendorBUList.DataTextField = "VendorBUName"; 
       ddlVendorBUList.DataValueField = "VendorBUID"; 
       ddlVendorBUList.DataBind(); 
       ddlVendorBUList.Items.Insert(0, "--Select--"); 
      } 
      else 
      { 
       lblMessage.Text = "No states found"; 
      } 
     } 

    } 
} 

接下來,我CreateNewRecord.aspx頁,我有這樣的代碼,包括從用戶控制兩個下拉列表。我可以看到下拉列表正常工作。

<%@ Register TagPrefix="uc" TagName="VendorListControl" Src="Controls/VendorListControl.ascx" %> 
// Some where in the form 
<tr> 
    <td class="right" width="20%">Vendor Name:</td> 
     <td> 
      <uc:VendorListControl runat="server" /> 
     </td> 
</tr> 

問題與這兩個下拉列表的ID有關。當我嘗試執行插入記錄時,似乎沒有檢測到來自用戶控制ascx頁面的「ddlVendorList」和「ddlVendorBUList」的ID。錯誤「名稱'ddlVendorList'在當前上下文中不存在」

ExecuteInsert(ddlVendorList.SelectedItem.Text, 
    ddlVendorBUList.SelectedItem.Text, 
    MDFAmount.Text, 
    StartDate.Text, 
    EndDate.Text, 
    VendorQuarter.Text, 
    MDFName.Text, 
    MDFSummary.Text, 
    Status.SelectedItem.Text, 
    CreatedBy.Value 
); 
Response.Write("<b>Record was successfully added!</b>"); 

我知道我是ASP.NET新手,所以請幫忙。

回答

2

您可以在您的VendorListControl中放置兩個屬性以獲取ddlVendorList selectedItem文本和ddlVendorBUList selectedItem文本。

在VendorListControl.ascx.cs:

public string GetDdlVendorListSelectedItemText 
{ 
    get { return this.ddlVendorList.text; } 
} 

public string GetDdlVendorBUListSelectedItemText 
{ 
    get { return this.ddlVendorBUList.text; } 
} 

然後從你的CreateNewRecord頁面,您可以訪問這些屬性。你只需要一個ID添加到您的控制:

<%@ Register TagPrefix="uc" TagName="VendorListControl" Src="Controls/VendorListControl.ascx" %> 
// Some where in the form 
<tr> 
    <td class="right" width="20%">Vendor Name:</td> 
     <td> 
      <uc:VendorListControl id="vendorListControl" runat="server" /> 
     </td> 
</tr> 

,您可以訪問你的財產像這樣CreateNewRecord.aspx.cs:

ExecuteInsert(this.vendorListControl.GetDdlVendorListSelectedItemText, 
    this.vendorListControl.GetDdlVendorBUListSelectedItemText, 
    MDFAmount.Text, 
    StartDate.Text, 
    EndDate.Text, 
    VendorQuarter.Text, 
    MDFName.Text, 
    MDFSummary.Text, 
    Status.SelectedItem.Text, 
    CreatedBy.Value 
); 
+0

我現在的工作。感謝你對我這樣的新手真的很有幫助。 – Milacay

1

可以定義public property誰在你的用戶控件返回SelectedItem.Text

用戶控件(ASCX)

public string YourValue 
{ 
    get 
    { 
    return ddlVendorList.SelectedItem.Text; 
    } 

} 

頁(CSS)

您可以使用公共財產:YourValue。

ExecuteInsert(YourValue, 
....... ); 

諾塔:如果您想設定值時,你對你的財產

定義setter方法後,你的更新增加論文性質

public string YourDdlVendorListSelectedItemText 
{ 
    get 
    { 
     return this.ddlVendorList.text; 
    } 
} 

public string YourDdlVendorBUListSelectedItemText 
{ 
    get 
    { 
    return this.ddlVendorBUList.text; 
    } 
} 
+0

我使用ascx.cs文件中的代碼更新了帖子。由於我是新手,請幫助看看該文件,並讓我知道我需要修改...謝謝! – Milacay

+0

我很樂意幫助你Milacay,我更新了我的文章 –

+0

謝謝,我現在能夠正常工作 – Milacay

相關問題