Imam zanimiv problem, za katerega nisem našel prave rešitve preko googla. Namreč na svojem GridView-u se postavim na Edit mode in prikažem TextBox-e. Ko stisnem gumb Update, da bi vse (trenutno nastavljeno na 10 vrstic) vsebine iz TextBox-ov prenesel in potem preko parametrov vnesel v sql, mi prenese stare vrednosti teksta v TextBox-u. Moram povedati, da sam kontroliram GridView (nisem nastavil DataSourceID ) s svojo napisano funkcijo DataBind, ki gre nekako takole:
Problem nastane, ker je v textOpis tipa TextBox-u še vedno stara vsebina teksta in ne na novo napisana, ko se stisne Update gumb. Ideja je, da se pri uporabniškem pritisku na gumb Update prenese nova vsebina iz textboxov, da lahko preko foreach-a napolnim parametre za Update. Ali moram implementirati TextChanged metodo!? Kako to izvedem? Ali je potrebna kaka JS helper skriptica?
BTW
Aja, SqlDataSource pa namerno nisem uporabil, ker pri TextBoxih velkih preko 5kB, pride do Rumenega Ekrana napake. Namreč, kakor sem razumel na večih forumih ima komponenta SqlDataSource hrošč, ki preprečuje, da bi bila večja vsebina teksta, ki se bi prenesla v sql stavek. S SqlDataAdapterjem, pa ni težav s vnosom par kB teksta v sql stavek. ;)
void BindData()
{
SqlConnection myConnection = new SqlConnection(connectionString);
SqlDataAdapter ad = new SqlDataAdapter("SELECT [NekiField] from NekaTabela", myConnection);
DataSet ds = new DataSet();
ad.Fill(ds);
gridViewPrevod.DataSource = ds;
gridViewPrevod.DataBind();
}
Izsek iz default.aspx, pri GridView definiciji TemplateField-a: (uporabljam Azamov trik (GridViewGuy) za "emulacijo" kdaj je v Edit in Show mode-u)
<asp:TemplateField HeaderText="Opis">
<ItemTemplate>
<asp:Label ID="lblOpis" Visible='<%# !(bool) IsInEditMode %>' runat="server" Text='<%# Eval("Opis") %>' Font-Size="11px" />
<asp:TextBox ID="txtOpis" runat="server" Enabled="true" TextMode="MultiLine" Visible='<%# IsInEditMode %>' Text='<%# Eval("Opis") %>' Font-Size="11px" Width="300px" Height="200px" />
</ItemTemplate>
</asp:TemplateField>
Na koncu pod GridView-a je še gumb btnUpdate, ki sproži lastno napisano metodo Update():
foreach (GridViewRow row in gridViewPrevod.Rows)
{
// vsebina za parameter Opis
strTemp = (row.FindControl("txtOpis") as TextBox).Text;
OpisParam.Value = strTemp;
....
}
PS: trenutno sem obkljukal pri GridView komponenti EnableViewState="true", prej sem imel na false in začuda splet. aplikacija deluje, tako kot sem predvidil.
HedaWhece - nedelja, 17. november 2024
<a href=https://fastpriligy.top/>priligy amazon</a> Husband want you
HedaWhece - sobota, 09. november 2024
You don just go on 20 week long cycles take a little time off then go back on like that <a href=https://fastpriligy.top/>buy priligy 60</a> However, generally this kind of ultimate move has strong energy fluctuations, so they can only be which hormone reduces blood glucose levels vigilant
Samir - ponedeljek, 19. februar 2007
Hvala za odgovor, Bojan! Sedaj sem popravil kodo, po tvojih predlogih, nastavil Cache direktivo v aspx-u. Samo imam en problem (da ne odpiram novega threada). Recimo, da iz baze podatkov preberem podatek iz sql stolpca DatumSpre (datum spremembe) in bi rad, preden pokažem (bindam) podatke na GridView, da mi metoda, ki pogleda trenutni čas in čas vsakega podatka v DatumSpre (brez skrbi, podatkov je okoli nekaj tisoč) s trenutnim, in s tistim, ki mu je "najbližji" ozr. najmanj zaostalim časom, ga prikažem. Ampak, to bom že sam sprogramiral.Kar me pa močno zanima v tem GridView je to, da namreč, kako se pogleda za določen podatek, skozi vse vrstice in ne samo trenutne, ki se bodo pokazale s NekiGridView.Rows. Da bom lahko primerja s nekim podatkom. In kako obarvam ozr. nastavim na Selected row, ko vem za podatek? Torej, na kratko in jedernato, muči me:- kako pogledati, skozi čisto vse vrstice, za določen podatek v stolpcu (da ga bom lahko primerjal s drugim podatkom) in ne na trenutne vrstice, ki se bodo prikazale (foreach (GridViewRows gvr in NekiGridView.Rows) odpade)- kako potem, ko vem, kateri stolpec, mu določiti/prebrati (PageIndex) na kateri strani je in potem ga obarvati, bodisi spremeniti row color ali nastaviti na Selected. Kako se row nastavi na Selected !?
bojanv - ponedeljek, 12. februar 2007
to kar počneš, ne bo šlo. Zakaj? Ker ne veš, ker ko spremeniš edit mode in ne obnoviš podatke, se ti ne bodo shranile v bazo. Vse, kar moraš storiti, je, da v updating preko argumentov (GridViewUpdateEventArgs --> e.NewValues), pobereš ven parametre, jih zapišeš v bazo. Ker ne delaš preko datasourceid-ja, moraš ročno tudi vezati podatke (na koncu sprožiš metodo BindData, da se ti podatki osvežijo). Recimo, tale post ti bo mogoče pomagal.Da ti pa prej ni delalo (ker si imel EnableViewState na false), je pa logično, ker v tem primeru se ti ohranja samo ControlState. Ostale stvari se ne shranjujejo. Recimo, paging zna bit problematičen. Če imaš ViewSate na true, se v page zapišejo podatki, da ostanejo pri postback-u ali resfresh-u vrednosti, ki si jih nastavil na pravem mestu. Lahko sicer delaš tudi brez ViewState-a, ampak boš potem moral stvari ročno nastavljat ob vsakem page-u. Preberi si tale članek pa ti bo vse jasno.Ker delaš z ogromnimi količino podatkov, priporočam Cache, da ne boš imel nepotrebnih trip-ov v bazo.