0

ddlMealTypeDropDownListでの選択に応じて、適切な値を使用してDropDownList で正しい選択を選択しようとしていますddlMeals。これは、食事を手動で選択した場合は正常に機能しますが、ページが最初に読み込まれたときは機能しません (selectedIndex = -1 for のためddlMeal)。

そのため、選択したインデックスを Page_Load のリストの最初の食事に設定しようとしましたが、次の行にブレークポイントを追加すると、SelectedIndex の値がまだ -1 であることがわかります。dropdownList の SelectedIndex プロパティをプログラムで設定することはできませんか?

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ddlMeals.SelectedIndex = 0;
            ddlMeals_SelectedIndexChanged(this, EventArgs.Empty);
        }
   }

    protected void ddlMeals_SelectedIndexChanged(object sender, EventArgs e)
    {
        // Fetch details for selected Meal
        SqlDataReader reader = null;
        String ConnectString = System.Configuration.ConfigurationManager.ConnectionStrings["Kunskapshjulet"].ConnectionString;
        SqlConnection connection1 = new SqlConnection(ConnectString);
        SqlCommand selectCommand = new SqlCommand("SELECT MealType FROM Meals WHERE MealID = " + ddlMeals.SelectedValue, connection1);
        try
        {
            connection1.Open();
            reader = selectCommand.ExecuteReader();

            reader.Read();
            string strMealtype = reader[0].ToString();
                ddlMealTypes2.SelectedValue = reader[0].ToString();
        }


        <asp:DropDownList ID="ddlMeals" runat="server" OnSelectedIndexChanged="ddlMeals_SelectedIndexChanged"
                      AutoPostBack="True" DataSourceID="SqlMealsPerUser" DataTextField="MealName" DataValueField="MealID" Width="180px">
        </asp:DropDownList>
4

3 に答える 3

3

PageLoad で SelectedIndex を設定する前に、データを DropDownList にバインドする必要があります。

于 2013-10-10T08:42:36.523 に答える
0

aspx コードでSqlMealsPerUserは、データソース ID です。それに価値はありますか?コードビハインドがPage_Load終了して初めて、データがコントロールにバインドされると思います。

その場合、使用できます

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ddlMeals.DataSource=BindData(); // this function gets the data u need to bind to your drop down.
            ddlMeals.DataBind();
            if(ddlMeals.Items.Count > 0)
            {
                ddlMeals.SelectedIndex = 0;
                ddlMeals_SelectedIndexChanged(null, EventArgs.Empty);
            }
        }
    }
于 2013-10-10T08:56:50.417 に答える
0

SelectIndex 関数が DropDownList で C# に追加された場合、次の方法で SelectIndexChanged イベントが実行されます:

  protected void Page_Load(object sender, EventArgs e)
  {
     if (!IsPostBack)
     {
        ddlMeals.DataBind();
        if(ddlMeals.Items.Count > 0)
        {
            ddlMeals.SelectedIndex = 0;
            ddlMeals_SelectedIndexChanged(null, EventArgs.Empty);
        }
  }

サルドス!!

于 2015-01-07T18:17:42.510 に答える