0

選択したインデックス変更イベントに以下のコードを使用しています。イベントが2回発生しましたが、このエラーを修正できません。このエラーを修正するのを手伝ってください。

これは私のコードです:

   if (ListBox1.Items.Count > 0)
   {
       for (int i = 0; i <= ListBox1.Items.Count - 1; i++)
       {
           if (ListBox1.Items[i].Selected == true)
           {
               lblempid.Text = Convert.ToString(ListBox1.Items[i].Text.Substring(0, 8));
               lblempname.Text = Convert.ToString(ListBox1.Items[i].Text.Substring(9));
               DataSet5TableAdapters.sp_GetallpayperiodTableAdapter TA = new DataSet5TableAdapters.sp_GetallpayperiodTableAdapter();
               DataSet5.sp_GetallpayperiodDataTable DS = TA.GetData();
               if (DS.Rows.Count > 0)
               {
                   fromdate = Convert.ToString(DS.Rows[DS.Rows.Count - 1]["fldstartdate"]);
                   todate = Convert.ToString(DS.Rows[DS.Rows.Count - 1]["fldtodate"]);
                   status = Convert.ToString(DS.Rows[DS.Rows.Count - 1]["fldstatus"]);
                   if (status == "OPEN")
                   {
                       lblfromdate.Text = string.Format("{0:yyyy-MM-dd}", fromdate);
                       lbltodate.Text = string.Format("{0:yyyy-MM-dd}", todate);
                   }
               }

           }
       }
   }
4

1 に答える 1

0

Page_Load ハンドラの内部を見てください。そこにリストボックスの選択を設定している場合は、次のように括弧で囲む必要があります。

if (!Page.IsPostBack)
{
    ListBox1.SelectedItem = "your old selection";
}

そうしないと、説明したように、ハンドラーが 2 回起動することがわかります。

また、これはあなたの質問に対する答えではありませんが、そのループを取り除きたいと思うかもしれません:

if (ListBox1.SelectedIndex == -1) return;

string theItem = ListBox1.SelectedItem.ToString();

lblempid.Text = theItem.Substring(0, 8);
lblempname.Text = theItem.Substring(9);
DataSet5TableAdapters.sp_GetallpayperiodTableAdapter TA 
    = new DataSet5TableAdapters.sp_GetallpayperiodTableAdapter();
DataSet5.sp_GetallpayperiodDataTable DS = TA.GetData();
if (DS.Rows.Count > 0)
{
    fromdate = Convert.ToString(DS.Rows[DS.Rows.Count - 1]["fldstartdate"]);
    todate = Convert.ToString(DS.Rows[DS.Rows.Count - 1]["fldtodate"]);
    status = Convert.ToString(DS.Rows[DS.Rows.Count - 1]["fldstatus"]);
    if (status == "OPEN")
    {
        lblfromdate.Text = string.Format("{0:yyyy-MM-dd}", fromdate);
        lbltodate.Text = string.Format("{0:yyyy-MM-dd}", todate);
    }
}
于 2012-07-26T14:54:57.887 に答える