2011-08-09 6 views
0

데이터베이스의 내용을 표시하는 listview가 있습니다. 내 양식에 새로 고침 단추가 있습니다. 새로 고침 단추를 클릭하면 목록보기가 다시 한 번 업데이트됩니다. 문제는 새로 고침 버튼을 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

당신이 어떤 일시적인 필드와 GetData() 방법은 ListView1.SelectedIndex 특성이 같은

일 임시 필드의 값을 할당하여 ListView1의 선택된 인덱스 속성을 다시 호출 한 후 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

메소드 로컬 변수 여야합니다. 그리고 많은 항목을 선택할 수 있습니다. –