2012-03-28 6 views
0

Ich möchte einige Daten, die in Array-Liste eingecheckt ist. Ich habe Kontrollkästchen zu Gridview hinzugefügt und wenn ich eines der Elemente überprüft. click event von checkbox runs für alle also zB habe ich zwei daten wenn ich auf das any checkbox klicke es läuft 4 mal, so dass es für jeden funktioniert aber ich möchte das nur das einzelteil eines checkboxes welches angehakt oder unchecked ist hinzugefügt auflisten. Gibt es eine Lösung oder eine andere Lösung?Wie kann ich Artikel hinzufügen, die auf Arraylist in Gridview überprüft werden C# asp.net

 // checkbox click event 
    protected void SelectedFriends_Click(object sender, EventArgs e) 
     { 

     bool isflag=false; 

     foreach (GridViewRow row in GridView1.Rows) 
     { 
      // Access the CheckBox 
      CheckBox cb = (CheckBox)row.FindControl("FriendSelector"); 

      if (cb != null && cb.Checked) 
      { 




       string friendname = GridView1.Rows[row.RowIndex].Cells[1].Text.ToString(); 
       for (int i = 0; i < list.Count; i++) 
       { 
        if (friendname.Equals(list[i].ToString())) 
        { 
         isflag = true; 
        } 
       } 
       // if it is added previously don't add to list 
       if(!isflag) 
       { 
        list.Add(friendname); 
       } 

      } 
      else 
      { 

       string friendname = GridView1.Rows[row.RowIndex].Cells[1].Text.ToString(); 
       for (int i = 0; i < list.Count; i++) 
       { 
        if (friendname.Equals(list[i].ToString())) 
        { 
         isflag = true; 
        } 
       } 
       // if it is not checked and it is in list delete it from list 
       if(isflag) 
       { 

        list.Remove(friendname); 
       } 

      } 
     } 


    } 






    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" 
      AutoGenerateColumns="False" DataSourceID="SqlDataSource1" Font-Bold="True" 
      Width="157px"> 
      <Columns> 
      <asp:TemplateField HeaderText="Select"> 
      <ItemTemplate> 

          <asp:CheckBox runat="server" id="FriendSelector" 
        oncheckedchanged="SelectedFriends_Click" AutoPostBack="True"> 

      </asp:CheckBox> 

      </ItemTemplate> 

      </asp:TemplateField> 
       <asp:BoundField DataField="F_Name" HeaderText="Friend Name" 
        SortExpression="F_Name" /> 
      </Columns> 


     </asp:GridView> 

Antwort

0

Können Sie das versuchen?

protected void SelectedFriends_Click(object sender, EventArgs e) 
     { 

     list.Clear(); 

     foreach (GridViewRow row in GridView1.Rows) 
     { 
      // Access the CheckBox 
      CheckBox cb = (CheckBox)row.FindControl("FriendSelector"); 

      if (cb != null && cb.Checked) 
      { 

       string friendname = GridView1.Rows[row.RowIndex].Cells[1].Text.ToString(); 
       list.Add(friendname); 

      } 
     } 


    } 
+0

es scheint, dass Daten erfolgreich hinzugefügt wird, aber list.Count() gleich 0 Ich verstehe nicht, den Grund, wenn ich einen buttoon void button1_Click geschützt klicken (Senderobjekt, EventArgs e) { if (Liste. Count == 0) { Label1.Text = "Es gibt keinen ausgewählten Freund"; } sonst { DBConnection db = neue DBConnection(); Boolesches Ergebnis = db.ShareRSS (selectedId, Benutzername, Liste); } } – leventkalayz

+0

Wenn Sie eine Variable außerhalb aller Funktionen ('global') deklarieren, wird ihr Status nach dem Postback nicht beibehalten. Sie müssen also Session verwenden. Fügen Sie nach dem Hinzufügen aller Elemente eine Liste zur Sitzung in der obigen Funktion hinzu. Dann, wo Sie die Liste überprüfen, nehmen Sie es aus der Sitzung. – PraveenVenu

+0

Vielen Dank es funktioniert – leventkalayz

Verwandte Themen