Quantcast
Channel: ppedv Team Blog
Viewing all articles
Browse latest Browse all 1198

Radiobuttongroup in Listviews

$
0
0

Asp.Net Webforms

Problem Nr 1
.<ItemTemplate>

<tr>

<td>

<%#Eval("Title") %>

<%#Eval("Speaker") %>

</td>

<td>

    <asp:RadioButtonrunat="server"GroupName= ' "Groupname" + <%#Eval("InputBoxName")%>'/>

</td>

</tr>

</ItemTemplate>


Der Radiobutton wird vom Server gerendert und das GroupNamenattribut wird nur angehängt statt zugewiesen. Somit ist der Name jedes einzelnen Radiobuttons einzigartig und unabhängig von einer Gruppe


<inputtype="radio"name="…$outerListview$ctrl1$innerListview$ctrl0$name = 'Grpname1'"/>

<inputtype="radio"name="…$outerListview$ctrl1$innerListview$ctrl1$name = 'Grpname1'"/>

 

Workaround

Es gibt viele Workarounds, in JavaScript als auch C#, die den Gruppennamen manuell austauschen. Doch mit dem Löschen/Verändern des Namens geht auch der Status des Inputs bei den Postbacks verloren, somit weiß man nicht mehr welche Radiobuttons „true“ waren.
Da wir noch die Eingabe des Users auswerten wollen, stellen wir mit jQuery (JavaScript Framework) nur das Verhalten nach.

 

Mein ganzer Quellcode wird in document.ready gepackt um sicherzugehen, dass alle Elemente fertig geladen wurden.
Normalerweise werden beim Wählen eines Radios in einer Gruppe die Restlichen deaktiviert. Sozusagen das Klicken auf den Radiobutton löst das Event aus.

Für den nächsten Schritt betrachten wir den Namen der Inputbox nochmal genauer…
name="…$outerListview$ctrl1$innerListview$ctrl1$name = 'Grpname1'"

Von dem String brauchen wir alle Zeichen ab der Stelle $name ='. Das letzte Hochkomma fällt auch noch weg. Was übrig bleibt ist der eigentliche Gruppenname.

 

$(document).ready(function () {

   $("input[type='radio']").change(function () {

 

var fullName = $(this).attr("name");               // Der Name als String
var groupName = "$name ='", input = $(this);

//herausfiltern des Namens
var name = fullName.substr(fullName.indexOf(groupName)+ groupName.length, fullName.length-1));

 
$(
" input[name*=" + name + "]").each(function () {
       /*Jedes Gruppenmitglied, dass nicht die Funktion
       aufgerufen hat wird zurück gesetzt*/

if (input.attr("name") != $(this).attr("name")) {

$(this).removeAttr("checked");

}

});

   });

});

 

Problem Nr 2

Auf die Radiobuttons selbst kann man nicht zugreifen, da sie keine Id besitzen. Selbst wenn man Ids mit einem Eval zuweisen würde, bei langen Listen wäre es ein zu großer Aufwand jeden einzelnen Anzusprechen. 

 

Workaround

Aus diesem Grund macht es Sinn sich dem gemeinsamen Elternelement zuzuwenden, denn (in diesem Beispiel die Listview) die Kinderelemente beinhaltet. Die Controles sind in einem Array organisiert und mit Hilfe des Indexes kann man auf die zugreifen

Wir laufen im Listview alle Itemtemplates durch und in dem Itemtemplates wiederum die einzelnen Controles.

 

for (int i = 0; i <= MyListview.Items.Count - 1; i++){

    for (int col = 0; col <= MyListview.Controls[i].Controls.Count - 1; col++)    {

        if (MyListview.Controls[i].Controls[col].GetType().Name == " RadioButton ")    {

            RadioButton chkTemp = (RadioButton)MyListview.Controls[i].Controls[col];
      
     // Speicher die Daten evtl in einer Datenbank

        }

    }

}

Es gibt die Möglichkeit Itemtemplates nach eigenen Kriterien anzusprechen. Die Klasse, dessen Objekte wiedergegeben werden, bestehen aus Properties. Aus dem Properties kann man den Datenschlüssel definieren und dann in der If-Abfrage verwenden.

<asp:ListViewID="MyListview"runat="server"DataKeyNames="Id">

    <ItemTemplate>

  ...

    </ItemTemplate>

</asp:ListView>

So hat man zB bei Sätzen aus der Datenbank gleich die richtige Id.
DbModel.YourTable.Find(MyListview.DataKeys[i].Value);


Viewing all articles
Browse latest Browse all 1198

Trending Articles


Vimeo 10.7.1 by Vimeo.com, Inc.


UPDATE SC IDOL: TWO BECOME ONE


KASAMBAHAY BILL IN THE HOUSE


Girasoles para colorear


Presence Quotes – Positive Quotes


EASY COME, EASY GO


Love with Heart Breaking Quotes


Re:Mutton Pies (lleechef)


Ka longiing longsem kaba skhem bad kaba khlain ka pynlong kein ia ka...


Vimeo 10.7.0 by Vimeo.com, Inc.


FORECLOSURE OF REAL ESTATE MORTGAGE


FORTUITOUS EVENT


Pokemon para colorear


Sapos para colorear


Smile Quotes


Letting Go Quotes


Love Song lyrics that marks your Heart


RE: Mutton Pies (frankie241)


Hato lada ym dei namar ka jingpyrshah jong U JJM Nichols Roy (Bah Joy) ngin...


Long Distance Relationship Tagalog Love Quotes