3

上記のエラーは、リストボックスの SelectedIndexChanged クリック イベントで発生します。

デバッグでは返される値は "" ですが、Web ページのソース コードを見ると、間違いなく値があります。

これが私のリストボックスです:

<asp:ListBox ID="lstBxMyList" runat="server" CssClass="binorderlst1"
     DataTextField="myName" 
     DataValueField="myID" 
     OnSelectedIndexChanged ="lstBxMyList_SelectedIndexChanged"
     AutoPostBack="true" Rows="10">
</asp:ListBox>

イベントは次のとおりです。

protected void lstBxMyList_SelectedIndexChanged(object sender, EventArgs e)
{
    myID = Convert.ToInt32(lstBxSiteList.SelectedValue.ToString());

    ... rest of code
}

完全を期すために、データバインディングは次のとおりです。

private void BindLstBxMyList(int myOtherID)
    {
        DataTable dt = new DataTable();
        SqlConnection conn;
        SqlCommand comm;

        using (conn = new SqlConnection(aSHconns.aconn))
        {
            comm = new SqlCommand("myStoredProc", conn);
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.Add(new SqlParameter("@myOtherID", SqlDbType.Int));
            comm.Parameters["@myOtherID"].Value = myOtherID;
            SqlDataAdapter sqlDa = new SqlDataAdapter(comm);

            try
            {
                conn.Open();
                 sqlDa.Fill(dt);
                 if (dt.Rows.Count > 0)
                 {
                     lstBxMyList.DataSource = dt;
                     lstBxMyList.DataTextField = "myName";
                     lstBxMyList.DataValueField = "myID";
                     lstBxMyList.DataBind();
                 }

            }

            finally 
            {
                conn.Close();
            }
        }

    }

SqlDataSource に戻ると、リストボックスは値を返します。Btリストを再作成する必要があるため、データバインドの背後にあるコードが必要です(もちろん、より良い方法がない限り)

では、リストボックスの選択された値が空の文字列を返すのはなぜですか? どんな助けでもありがたく受け取られます。

4

1 に答える 1

6

プロパティ AutoPostBack = "True" があり、選択した各インデックスが変更されたときにポストバックが行われます。そのため、Selected index changed イベントに移動する前に、リストボックスをバインドしているページの読み込みにヒットする必要があります。そのため、ページの読み込みに達すると、選択されたインデックスがデフォルトの項目に変更されます。そこで、次のコードを試してください。

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
             //Bind your listbox here
            }
         }
于 2012-05-23T15:35:00.980 に答える