2017-09-08 4 views
0

J'ai une DropDownList et à côté d'un texte d'entrée. La liste déroulante est remplie à partir de la base de données.définir le texte de saisie en fonction de la valeur sélectionnée à partir de ASP: DropDownList

Utility.cs

public DataTable Get_Student_Billing_Type(DropDownList lb, int faculty) 
     { 
      try 
      { 
       DataTable dt = new DataTable(); 
       SqlParameter param1 = new SqlParameter("@P_BILLING_FACULTY", SqlDbType.Int); 
       param1.Value = faculty; 
       dt = DbAccessHelper.ExecuteDataSet("P_GET_BILLING_TYPE", new SqlParameter[] { param1 }, true).Tables[0]; 
       if (dt != null && dt.Rows.Count > 0) 
       { 
        foreach (DataRow row in dt.Rows) 
        { 
         lb.Items.Add(new ListItem(row["BILLING_HEADING"].ToString(), row["BILLING_TYPE_ID"].ToString())); 

        } 
       } 
       return dt; 

      } 
      catch (Exception) 
      { 

       return null; 
      } 
     } 

Cette DataTable dt a 3 colonnes BILLING_HEADING, BILLING_TYPE_ID, BILLING_AMOUNT

Mon exigence est lorsque l'utilisateur sélectionne une valeur-à-dire BILLING_HEADING dans la liste déroulante son BILLING_AMOUNT correspondante doit être indiquée dans le texte d'entrée à côté il. Je sais que je dois utiliser OnSelectedIndexChanged mais comment afficher la valeur de champ correspondante de DataTable sur l'élément sélectionné.

code page asp

<div class="form-group"> 
    <label for="inputType" class="col-md-2 control-label">Type</label> 
    <div class="col-md-6"> 
     <asp:DropDownList ID="DDL_type" class="form-control input_text" OnSelectedIndexChanged="DDL_type_SelectedIndexChanged" runat="server"></asp:DropDownList> 
    </div> 
    <div class="col-md-3"> 
     <input type="text" class="form-control input_text" id="inputTypeAmount" placeholder="AMOUNT" readonly="true" autocomplete="off" /> 
    </div> 
</div> 

code ASPX

protected void GetType() 
     { 
      try 
      { 
       DataTable dt = new DropDown().Get_Patient_Billing_Type(DDL_type, 1); 
      } 
      catch (Exception) 
      { 

       throw; 
      } 
     } 

     protected void DDL_type_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      try 
      { 
      // how to write logic so that the corresponding BILLING_AMOUNT show for selected BILLING_HEADING 

      } 
      catch (Exception) 
      { 

       throw; 
      } 
     } 

Répondre

1

Vous pouvez le faire comme ceci:

var selectedRow = dt.AsEnumerable() 
        .Where(row => row.Field<int>("BILLING_TYPE_ID") == Convert.ToInt32(DDL_type.SelectedValue)).FirstOrDefult(); 

yourTextBox.Text = Convert.ToString(selectedRow.Field<int>("BILLING_AMOUNT")); 
+0

obtenir erreur 'Impossible de jeter l'objet de type 'System.Int32' pour saisir 'System.String' dans la requête, '.Where (row => row.Field (" BILLING_TYPE_ID ") == DDL_type.SelectedValue) .FirstOrDefult();' ' BILLING_TYPE_ID' a le type de données INT dans la table. – user4221591

+0

@ user4221591 J'ai supposé que 'BILLING_TYPE_ID' avait une chaîne de type de données. J'ai donc utilisé 'row.Field (" BILLING_TYPE_ID ")'. J'ai édité ma réponse. J'ai changé 'selectedRow.Field (" BILLING_AMOUNT ")' aussi. –