none
Problem mit Selektion ListView und Aktivierung Radiobutton RRS feed

  • Frage

  • Hallo,

    ich möchte in meinem Datenliste (Listview-Control) einen Datensatz über einen Klick auf einen Radiobutton selektieren. Dabei soll auch der geklickte Radiobutton aktiv (checked) gesetzt bleiben und der Datensatz (ListviewItem) mittels "SelectedItemTemplate" markiert werden.

    Listview-Aufbau:
    Radiobutton 1 | Überschift 1
    Radiobutton 2 | Überschift 2
    Radiobutton 3 | Überschift 3

    ListView-Control:

    <asp:ListView ID="ListViewNews" runat="server" 
        DataKeyNames="news_id"
        OnPagePropertiesChanging="ListViewNews_OnPagePropertiesChanging">
    
        ....
        
    <ItemTemplate>
      <tr>
          <td class="tableitemfirst">
              <asp:RadioButton ID="NewsId" AutoPostBack="True" OnCheckedChanged="Testfuntion" GroupName="NewsId" value='<%# Eval("news_id") %>' runat="server" />
          </td>
          <td class="tableitemfirst">
              <asp:Label Text='<%# Eval("headline") %>' runat="server" />
          </td>
      </tr>
    </ItemTemplate>
    <SelectedItemTemplate>
        <tr>
            <td class="tableitem_activ">
                <asp:RadioButton ID="NewsId" AutoPostBack="True" OnCheckedChanged="Testfuntion" GroupName="NewsId" value='<%# Eval("news_id") %>' runat="server" />
            </td>
            <td class="tableitem_activ">
                <asp:Label Text='<%# Eval("headline") %>' runat="server" />
            </td>
        </tr>
    </SelectedItemTemplate>
    

    Code Behind:

    private void BindDataSource() {
        // Zugriff auf Newsdatenbank
        string connStrgNews = ConfigurationManager.ConnectionStrings["connStrgNews"].ConnectionString;
        SqlConnection oConnNews = new SqlConnection(connStrgNews);
        string spName  = "sp_newsdb_all";
        
        try
        {
            DataSet oDataSet = new DataSet();
            SqlDataAdapter oSqlDataAdapter = new SqlDataAdapter(spName, oConnNews);
            oSqlDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
            oSqlDataAdapter.Fill(oDataSet);
            ListViewNews.DataSource = oDataSet;
            ListViewNews.DataBind();
            oConnNews = null;
        }
        catch (SqlException ex)
        {
            Response.Write(ex);
            throw;
        }
    }
    
    protected void Testfuntion(object sender, EventArgs e)
    {
        RadioButton oRadioButtonSender = (RadioButton)sender;
        string sRadioButtonSenderID = oRadioButtonSender.ID;
        string sRadioButtonSenderClientID = oRadioButtonSender.ClientID;
        int iItem = 0;
        foreach (ListViewItem oListeViewItem in ListViewNews.Items)
        {
            RadioButton oRadioButtonListView = (RadioButton)oListeViewItem.FindControl(sRadioButtonSenderID);
            if (oRadioButtonSender.Equals(oRadioButtonListView))
            {
                 oRadioButtonListView.Checked = true;
                //oRadioButtonListView.Attributes["checked"] = "checked";
                ListViewNews.SelectedIndex = iItem;
            }
            else {
                oRadioButtonListView.Checked = false;
            }
            iItem = iItem + 1;
        }
        BindDataSource();
    }
    

    Funktioniert soweit schon sehr gut aber leider ist noch ein kleiner Fehler drin. Der Radiobutton wird trotz aktiv setzen nicht als checked (aktiv) angezeigt. Vermutlich durch das binden der Datasouce (BindDataSource). Wenn ich das jedoch weg lasse wird die Selektion immer erst nach dem nächsten folgenden Klick gesetzt.

     

    Kann mir bitte jemand einen Tipp geben was ich falsch mache?

    Gruß Dani









     

    Donnerstag, 11. Juni 2009 07:06

Antworten

Alle Antworten