BjurisMedlem sedan juli 2001514 inlägg Jag håller fortfarande på med att få en verifieringsknapp då man klickar på delete, men jag får det inte riktigt som jag vill ha det och det beror på att jag har två värden som är beroende av vilka poster som jag skall ta bort i db.
<ItemTemplate>
<asp:LinkButton ID="cmdDelete" OnPreRender="DataGridBaser_PreRender" OnClick="DataGridBaser_onClick" Runat="server" CausesValidation="false">click me</asp:LinkButton>
</ItemTemplate>
I samma Datagrid har jag två lablar som heter lbl1 & lbl2
När man klickar på länken så anropas:
protected void DataGridBaser_PreRender(object sender, System.EventArgs e)
{
((LinkButton)sender).Attributes.Add("onclick", "return confirm ('Vill du radera huser?');");
}
protected void DataGridBaser_onClick(object sender, System.EventArgs e)
{
LinkButton lb = ((LinkButton)sender);
Label lbl1 = ((Label)DataGridBaser.Items[0].FindControl("lbl1"));
Label lbl2 = ((Label)DataGridBaser.Items[0].FindControl("lbl2"));
lblError.Visible=true;
lblError.Text="Testing " + lb.ID+" "+lblSubBas.Text+"tt";
string s = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
//appConnectionString = (string.Format(s, Server.MapPath("")));
//dg = new SqlServerDbGateway(appConnectionString);
//dg.DeletePost(Convert.ToInt32(UserSess.home.personId),Convert.ToInt32(lbl1.Text),ToInt32(lbl2.Text));
//BindBasGrid("");
}
med hjälp av ovanstådende kod så kommer jag åt lablarna men bara den som ligger på rad 1, hur skall jag göra för att få det lite mer dynamsikt, alltså att värdena på varje label för varje rad i datagriden?
asmodieMedlem sedan jan. 2004501 inlägg Ehum en lite liten tanke.
Du skulle kunna lösa det mer så här.
På din linkbutton så kan du köra en on command="mittkommando(skicka in variabler här som du antagligen vill ha ut från repeatern)"
sedan skapar du en klass i codebehind som heter
protected void mittkommando(ta emot en massa grejer)
{
gör saker med grejerna
}
GladhMedlem sedan maj 20012 812 inlägg
Label lbl1 = ((Label)DataGridBaser.Items[0].FindControl("lbl1"));
Label lbl2 = ((Label)DataGridBaser.Items[0].FindControl("lbl2"));
Dina 2 Items[0] säger ju att du alltid skall ta första elementet i din datagrid och där leta upp Labelen.
Tyvärr så har System.EventArgs ingen referens till ditt datagrid så du kommer inte att kunna hitta vilken rad i datagriden som du tryckte på knappen i, men hjälp av System.EventArgs.
Jag skulle misstänka att den enklast lösningen är att du på din knapp lägger till ett nytt attribute som du döper till typ ItemIndex och i DataGrid_OnItemCommand() eller något annat event så skriver du det attributet till knappen, du kan sedan i ditt DataGridBaser_onClick event hämta upp den information från knappen och använda det indexet i stället för 0 i Items[].
- Magnus
DinoMedlem sedan sep. 20011 914 inlägg Är bättre att använda DataGridens ItemCommand som sker när man trycker på en knapp.
void ItemsGrid_Command(Object sender, DataGridCommandEventArgs e)
{
Label lbl1 = ((Label)e.Items.FindControl("lbl1"));
...
}
BjurisMedlem sedan juli 2001514 inlägg får bara ett felmess när jag försöker att använda Datagridens egena event command
CS0123: Method 'net.SmartSys.Portfolio.PortFolioWork.DataGridBaser_onClick(object, System.Web.UI.WebControls.DataGridCommandEventArgs)' does not match delegate 'void System.EventHandler(object, System.EventArgs)'
DinoMedlem sedan sep. 20011 914 inlägg void ItemsGrid_Command(Object sender, DataGridCommandEventArgs e)
{
Label lbl1 = ((Label)e.Items.FindControl("lbl1"));
...
}
...
<asp:datagrid id="DataGridBaser" onitemcommand="ItemsGrid_Command" runat="server">
<ItemTemplate>
<asp:LinkButton ID="cmdDelete" OnPreRender="DataGridBaser_PreRender" Runat="server" CausesValidation="false">click me</asp:LinkButton>
</ItemTemplate>
</asp:datagrid>