2011-09-26 65 views
1

首先,请原谅我的英语。我用Textbox和AutoCompleteExtender控件创建了一个用户控件,并且它工作正常。现在,我想反映我的文本框类似于下拉列表。当我将用户控件保存在GridView中并通过隐藏字段访问该值时,我得到的值为“0”。我如何阅读我的页面中隐藏的字段值?GridView中的自动完成用户控件的SelectedValue属性

UserControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" Code File="UserControl.ascx.cs" 
    Inherits="UserControl" %> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 

<script type="text/java script"> 
    function DispValue(sender, e) { 
     alert(e.get_value() + " : user control"); 
     document.getElementById(hiddenFieldName.Client ID).value = e.get_value();  
    } 
    </script> 
<asp:Hidden Field ID="hdnValue" runat="server" Value="0" /> 
<asp:Text Box ID="txtName" runat="server" Text=""> </asp:Text Box> 
<cc1:AutoCompleteExtender ID="ACEName" TargetControlID="txtName" runat="server" 
     CompletionInterval="10" MinimumPrefixLength="1" Service Method="Get Name" 
     Service Path="UserControlWebServices.asmx" OnClientItemSelected="DispValue">  
</cc1:AutoCompleteExtender> 

UserControl.ascx.cs

public partial class UserControl : System.Web.UI.UserControl 
{  
    protected void page_load(object sender, EventArgs e) 
    { 
     ACEName.ContextKey = "1"; 
    } 

    public String SelectedValue 
    { 
     get { return this.hdnValue.Value; } 
    } 

    public String SelectedText 
    { 
     get { return this.Name.Text; } 
    } 
} 

MyAspxPage.aspx

<%@ Register Src="~/UserControl.ascx" TagPrefix="puc" TagName="UserControl" %> <head runat="server"> 
    <title></title> </head> <body> 
    <form id="form1" runat="server"> 
    <asp:Script Manager ID="ScriptManager1" runat="server" EnablePageMethods="true"> 
    </asp:Script Manager> 
    <asp:Grid View ID="gvPatient" runat="server" AutoGenerateColumns="false" OnDataBound="GridPatient_DataBound"> 
     <Columns> 
      <asp:Template Field> 
       <Header Template> 
        Patient Name 
       </Header Template> 
       <Item Template> 
        <puc:UserControl ID="pucPatient1" runat="server" /> 
       </Item Template> 
      </asp:Template Field> </Columns> 
    </asp:Grid View> 
    <asp:Button ID="btnSave" runat="server" OnClick="Save" Text="Save" OnClientClick="return StartUpload();" /> 
    </form> 
    </body> 
</HTML> 

MyAspxPage.cs

DataTable dt; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      dt = new DataTable(); 
      dt.Columns.Add("col1"); 
      dt.Columns.Add("col2"); 
      dt.Columns.Add("col3"); 
      dt.Columns.Add("col4"); 
      dt.Columns.Add("col5"); 
      dt.Columns.Add("col6"); 


      if (Session["dt"] == null) 
      { 
       dt = AddRow(dt); 
       gvPatient.DataSource = dt; 
       gvPatient.DataBind(); 
       Session["dt"] = dt; 
       //ViewState["dt"] = dt; 
      } 
      else 
       dt = (DataTable)Session["dt"];//ViewState["dt"]; 

     } 
    } 

    private DataTable AddRow(DataTable dt) 
    { 
     for (int i = 0; i < 5; i++) 
     { 
      DataRow dr = dt.NewRow(); 
      dr[0] = ""; 
      dr[1] = ""; 
      dr[2] = ""; 
      dr[3] = ""; 
      dr[4] = ""; 
      dr[5] = ""; 
      dt.Rows.Add(dr); 
     } 
     return dt; 
    } 

protected void GridPatient_DataBound(object sender, EventArgs e) 
    { 
     foreach (GridViewRow item in gvPatient.Rows) 
     { 
      UserControl ptuc = (UserControl)item.FindControl("pucPatient1"); 
      string id = ptuc.SelectedValue; 
     } 
    } 

public void Save(object sender, EventArgs e) 
    { 
     foreach (GridViewRow item in gvPatient.Rows) 
     { 
      if (item.RowType == DataControlRowType.DataRow) 
      { 
       UserControl ptuc = (UserControl)item.FindControl("pucPatient1"); 
       string id = ptuc.SelectedValue;//getting null value. 
       string patientName = ptuc.SelectedText; 
      } 
     } } 

这是所有我所做的。

我卡住了,请帮助我。

朋友Sharanamma

+0

请修改您的问题以包含您遇到问题的代码的标记。然后我们可以试着帮助你=) – jadarnel27

+0

GridView中的隐藏字段是否也是? –

+0

不,我只保存在UserControl中 –

回答

0


感谢您的宝贵答复,
实际上它工作正常,但小用户控件变化
clientselected事件方面,I,E

用户控件。 ascx函数DispValue(sender,e){
var source = sender.get_id();
var lastIndex = source.lastIndexOf(“_”);
var replaced = source.substring(0,lastIndex + 1);
var hdnId =取代+“hdnPatientNumber”;
document.getElementById(hdnId).value = e.get_value();
}

UserControl.ascx.cs
公共字符串的SelectedValue {
{返回的Request.Form [this.hdnPatientNumber.UniqueID] }
}

感谢你的一切,
的问候,
Sharanamma。