从下拉列表中检索数据到同一页面中的文本框

时间:2013-11-08 05:01:13

标签: c# asp.net

我正在使用带有c#的asp.net,我有一个下拉列表,其中有一个varchar项列表,我有一个文本框,当我在下拉列表中选择一个项目时,它应该显示在文本框中。到目前为止,我已尝试过该代码,但它显示的是Null Reference Exception

Patient ID:<asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="SqlDataSource1" DataTextField="PatientID" 
    DataValueField="PatientID">
</asp:DropDownList>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:ConStr %>"
    SelectCommand="SELECT [PatientID] FROM [Patient_Data] WHERE ([DummyValue] = @DummyValue)">
    <SelectParameters>
        <asp:Parameter DefaultValue="Y" Name="DummyValue" Type="String" />
    </SelectParameters>
</asp:SqlDataSource>

 Hospital No.:
    </td>
    <td>
        <asp:TextBox ID="HospNo" runat="server" ></asp:TextBox>
    </td>

在C#中

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string pid = DropDownList1.SelectedItem.Text;
        HospNo.Text = pid.ToString();//Error in this line

        //other code
    }
 }

还有其他方法吗?任何建议都表示赞赏。

5 个答案:

答案 0 :(得分:3)

在下拉列表中添加一个属性 AutoPostback 并将其设置为true,如下所示:

<asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="SqlDataSource1" DataTextField="PatientID" 
    DataValueField="PatientID" AutoPostback="true"></asp:DropDownList>

您的代码是以if(!IsPostback)条件编写的。删除if条件或从下拉列表中选择的索引更改事件中指定值,如下所示。

DropDown列表:

<asp:DropDownList ID="DropDownList1" runat="server" 
    DataSourceID="SqlDataSource1" DataTextField="PatientID" 
    DataValueField="PatientID" AutoPostback="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged"></asp:DropDownList>

代码背后:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
   HospNo.Text = DropDownList1.SelectedItem.Text;
}

答案 1 :(得分:1)

您不需要ToString() string,它已经是string

在尝试在每个帖子上设置文本框的文本值之前,请尝试检查下拉列表的SelectedItemText是否确实存在,例如:

// Check to see if the selected item of the drop down list is something or not
if(DropDownList1.SelectedItem != null)
{
    if(!String.IsNullOrEmpty(DropDownList1.SelectedItem.Text)
    {
        HospNo.Text = DropDownList1.SelectedItem.Text;
    }
}

//other code

注意:此逻辑将检查每个帖子上是否存在选定项目返回服务器,并仅在下拉列表中有选定项目时显示文本值。

答案 2 :(得分:1)

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DropDownList1.AutoPostBack= true;
        string pid = DropDownList1.SelectedItem.Text;
        HospNo.Text = pid.ToString();//Error in this line

        //other code
     }
 }

答案 3 :(得分:0)

您正在为页面加载分配值,但尚未进行下拉选择。

您应该给下拉值,代码可以如下:

protected void Page_Load(object sender, EventArgs e) {

    if (!IsPostBack)
    {
        HospNo.Text = DropDownList1.Text;

    //other code
    }
 }

如果您有默认选择值,则可以通过以下方式执行:

HospNo.Text = DropDownList1.SelectedValue;

但在你的情况下,它似乎是空的,这就是错误存在的原因

答案 4 :(得分:0)

您应该将此代码放在下拉列表更改事件中。

注册更改事件

<asp:DropDownList ID="DropDownList1" runat="server" OnChange="DropDownList1_Change"
    DataSourceID="SqlDataSource1" DataTextField="PatientID" 
    DataValueField="PatientID">
</asp:DropDownList>

背后的代码

protected void DropDownList1_Change(object sender, EventArgs e)
{

        string pid = DropDownList1.SelectedItem.Text;
        HospNo.Text = pid.ToString();//Error in this line

}

这也可以在客户端使用Jquery / Javascript轻松完成。