webForumDet fria alternativet

Loopa fram knappar! Unika variabler

.NET

11 svar · 425 visningar · startad av Sjodahl

Medlem sedan maj 20033 218 inlägg
Frågan#1

Hej!

Det är så att jag läser ut lite data ifrån databasen just nu och jag vill för varje fält den hittar skall det skapas en ny knapp. Men vet inte riktigt hur jag skall köra med själva namnet på knappen hur jag skall loopa det.

        while (myReader.Read()) {

            Button [B]bButton1[/B]= new Button();
            bButton1.Text = (string)myReader.GetString(0);
            bButton1.Visible = true;
            Response.Write((string)myReader.GetString(0) + "</br>");

        }
Medlem sedan sep. 20011 914 inlägg
#2
.aspx
<asp:repeater id="repData" runat="server">
   <itemtemplate>
      <asp:button id="btButton" text='<%# Eval("ditt_kolumn_namn") %>' runat="server" /><br/>
   </itemtemplate>
</asp:repeater>

.cs
repData.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection); //cmd = OleDbCommand, SqlCommand eller vad du nu använder
repData.DataBind();
Medlem sedan maj 20033 218 inlägg
#3

Tackar!

Medlem sedan sep. 20011 914 inlägg
#4

Redigerar bort onitemdatabound, ser ut att vara lite överkurs i detta skedet. Byt ut ditt_kolumn_namn till kolumn namnet du tar ut från databasen.

Medlem sedan maj 20033 218 inlägg
#5

DONE! (y)

Medlem sedan sep. 20011 914 inlägg
#6

Du behöver inte myReader.Read() utan binder datareadern direkt till repeatern.

SqlConnection conn = new SqlConnection("connectionString");
SqlCommand cmd = new SqlCommand("SELECT din_kloumn FROM din_tabell", conn);
repData.DataSource = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
repData.DataBind();
Medlem sedan maj 20033 218 inlägg
#7

Dino skrev:

Du behöver inte myReader.Read() utan binder datareadern direkt till repeatern.

Japp såg det var nog lite för het på gröten ;)

Hur blir det när jag klickar på knapparn sen då ?
Hur kommer jag åt "button_Click" typ? Eller tar man han om detta på något annat sätt?

När jag klickar på en som det är nu:

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Många funderingar ;)

Medlem sedan sep. 20011 914 inlägg
#8

Vid knapp tryck gör du så här:

.aspx
<asp:Repeater id="repData" [B]OnItemCommand="repData_ItemCommand"[/B] runat="server">

.cs
void repData_ItemCommand(Object Sender, RepeaterCommandEventArgs e) 
{      
   Button bt =  e.CommandSource as Button;
   Response.Write(bt.Text);
}

Vad som sker är att knappens klick event bubblar upp till repeatern där det fångas i onitemcommand eventet.

Ett tips medan du lär dig är att titta i dokumentationen. Där hittar du det mesta.

Medlem sedan maj 20033 218 inlägg
#9

Tack, skall ta en titt där lite oftare ;)

Men stötter fortfarande på följande fel:
Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

Högst upp i filen har jag lagt till:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="changeConfig.aspx.cs" Inherits="changeConfig" EnableEventValidation="true" %>
Medlem sedan sep. 20011 914 inlägg
Medlem sedan maj 20033 218 inlägg
#11

ÄR detta det bästa sätta att loppa fram knappar på om man riskerar att det blir lite säkerhetsstrul?

Så det är Render funktionen jag skall skriva över:

protected override void Render(HtmlTextWriter writer)
{
   ClientScript.RegisterForEventValidation(

         [B]Vad skall jag lägga här min repeater?[/B]
//       _recipeList.UniqueID,"4");

   base.Render(writer);
}
Medlem sedan maj 20033 218 inlägg
#12

Kanske är det bättre att loppa fram länkar eller något annat istället?
Behöver ju inte vara en knapp, bara något man kan trycka på.

269 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
140 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)