2011-08-09 10 views
0

データベースからのコンテンツを表示するリストビューがあります。また、フォームにリフレッシュボタンがあります。リフレッシュボタンをクリックすると、リストビューが再度更新されます。ボタンはfocus.Thisから削除されますされ、リストビューで、すでに選択した項目をクリックすると、私のコードですc#リストビューフォーカスの問題

 private void btnRefresh_Click(object sender, EventArgs e) 
    { 
     //to refresh manually 
     this.Refresh(); 
     listView1.Items.Clear(); 
     /*btnEdit_Question.Enabled = true; 
     btnRepeat_Question.Enabled = true; 
     btnDelete_Question.Enabled = true;*/ 
     GetData(); 


    } 

    public void GetData() 
    { 

     try 
     { 
      now = DateTime.Now; 
      String time_date = now.ToString(); 
      myConnection = new SqlConnection(connectString); 
      listView1.Items.Clear(); 
      myConnection.Open(); 
      String MyString1 = string.Format("SELECT " + data_variables.RES_TXT_STRING_COLUMN1 + "," + data_variables.RES_TXT_STRING_COLUMN2 + "," + data_variables.RES_TXT_STRING_COLUMN3 + "," + data_variables.RES_TXT_STRING_COLUMN4 + "," + data_variables.RES_TXT_STRING_COLUMN6 + " FROM " + data_variables.RES_TXT_STRING_QUESTION_TABLE); 
      com = myConnection.CreateCommand(); 
      com.CommandText = MyString1; 
      dr = com.ExecuteReader(); 
      ListViewItem itmX; 
      //Adding the Items To The Each Column 
      while (dr.Read()) 
      { 
       itmX = new ListViewItem(); 
       itmX.Text = dr.GetValue(0).ToString(); 
       ListViewItem.ListViewSubItem aSubFooItem1 = new ListViewItem.ListViewSubItem(itmX, dr.GetValue(1).ToString()); //Creating subitems for the parent item 
       itmX.SubItems.Add(aSubFooItem1); 
       //Associating these subitems to the parent item 
       ListViewItem.ListViewSubItem aSubFooItem2 = new ListViewItem.ListViewSubItem(itmX, dr.GetValue(2).ToString()); //Creating subitems for the parent item 

       ListViewItem.ListViewSubItem aSubFooItem3 = new ListViewItem.ListViewSubItem(itmX, dr.GetValue(3).ToString()); //Creating subitems for the parent item 

       if (dr.GetValue(4).ToString() == "0") 
       { 
        aSubFooItem5 = new ListViewItem.ListViewSubItem(itmX, "No"); 
       } 
       else 
       { 
        aSubFooItem5 = new ListViewItem.ListViewSubItem(itmX, "Yes"); 
       } 

       if (dr.GetDateTime(2) < now && dr.GetDateTime(3) > now) 
       { 
        itmX.SubItems.Add(aSubFooItem2); 
        itmX.SubItems.Add(aSubFooItem3); 
        ListViewItem.ListViewSubItem aSubFooItem4 = new ListViewItem.ListViewSubItem(itmX, "In Progress"); 
        itmX.SubItems.Add(aSubFooItem4); 
        itmX.SubItems.Add(aSubFooItem5); 
        } 
       else if (dr.GetDateTime(2) <= now) 
       { 

        itmX.SubItems.Add(aSubFooItem2); 
        itmX.SubItems.Add(aSubFooItem3); 
        ListViewItem.ListViewSubItem aSubFooItem4 = new ListViewItem.ListViewSubItem(itmX, "Expired"); 
        itmX.SubItems.Add(aSubFooItem4); 
        itmX.SubItems.Add(aSubFooItem5); 
       } 
       else if (dr.GetDateTime(2) > now) 
       { 

        itmX.SubItems.Add(aSubFooItem2); 
        itmX.SubItems.Add(aSubFooItem3); 
        ListViewItem.ListViewSubItem aSubFooItem4 = new ListViewItem.ListViewSubItem(itmX, "Not Expired"); 
        itmX.SubItems.Add(aSubFooItem4); 
        itmX.SubItems.Add(aSubFooItem5); 
       } 
       //add all the items ti listview 
       listView1.Items.Add(itmX); 
       //Adding colors 
       itmX.UseItemStyleForSubItems = false; 
       foreach (ListViewItem lvi in listView1.Items) 
       { 
        if (lvi.SubItems[4].Text=="Expired") 
        { 

         lvi.SubItems[4].BackColor = Color.Red; 
        } 
        else if (lvi.SubItems[4].Text == "Not Expired") 
        { 
         itmX.SubItems[4].BackColor = Color.Yellow; 
        } 
        else 
        { 
         itmX.SubItems[4].BackColor = Color.Green; 
        } 

       } 

      } 
      EventLog log = new EventLog(data_variables.RES_TXT_STRING_LOG_EVENT); 
      try 
      { 

       log.Source = data_variables.RES_TXT_STRING_LOG_SOURCE; 

       log.WriteEntry(data_variables.REX_TXT_STRING_MESSAGE_SUCCESSFUL, EventLogEntryType.Information); 
      } 
     if (listView_Selected_Index > -1) 
     { 

       //Keep the focus in the listview 
       this.listView1.Items[listView_Selected_Index].Focused = true; 


     } 

      private void listView1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     now = DateTime.Now; 
     for (int i = 0; i < listView1.SelectedItems.Count; i++) 
     { 


     //Selecting the each values of the selected item from listview 


     listView_Selected_Index = listView1.SelectedIndices[i]; 

     } 
    } 

誰がどのようにしても更新ボタンが

をクリックしますされたリストビュー項目に焦点を当てたままに私を助けることができます

答えて

1

GetData()の上部にあるリストビューから元の(一部の選択された)項目を削除しています。 データベースから新しいデータを読み取る前に、選択した場所をどこかに保存する必要があります。次に、新しいデータがlistviewに表示されたら、データを更新する前に選択した内容に基づいて項目を選択する必要があります。

//store selected items (id or sth else that identifies item) 
GetData(); 
//restore selection (some of previously items may no longer exist) 

コードでは、最後に選択されたアイテムのみがすべてではなく保存されます。

for (int i = 0; i < listView1.SelectedItems.Count; i++) 
{ 
    //Selecting the each values of the selected item from listview 

    // here You are only saving last selected item 
    // instead of this do sth like 
    // selectedItems.Add(sth that identifies this item, not index) 
    listView_Selected_Index = listView1.SelectedIndices[i]; 
} 

また代わりのすべての上でそれをやってあなたには、いくつかの他の理由のためにそれを必要としない限り、あなたはデータのみをリフレッシュする前にそれを行うことができますのSelectedIndexChanged。あなたは何ができるか

0

は、いくつかの一時的な分野でListView1の現在選択されたインデックスを保存し、GetData()メソッドを呼び出した後ListView1.SelectedIndexプロパティに、このような

何かを一時的なフィールドの値を割り当てることによってListView1の選択されたインデックスのプロパティをリセットし、次のとおりです。

private int _selectedIndex = -1; 

private void btnRefresh_Click(object sender, EventArgs e) 
    { 
     _selectedIndex = listView1.SelectedIndex; 
     //to refresh manually 
     this.Refresh(); 
     listView1.Items.Clear(); 
     /*btnEdit_Question.Enabled = true; 
     btnRepeat_Question.Enabled = true; 
     btnDelete_Question.Enabled = true;*/ 
     GetData(); 
     listView1.SelectexIndex = _selectedIndex; 


    } 
+0

なぜメンバー変数ですか? Listviewは、多くの項目を選択できます。 –

+0

ListView1.Items.Clearを呼び出す前に、最後に選択したインデックスを最後に選択したインデックスを保存する一時変数 – Waqas

+0

メソッドのローカル変数である必要があります。多くのアイテムを選択できます。 –