Kui on tehtud veebivorm, mis kasutab .NET 4.0 ReportVieweriga tehtud komponenti siis mõningatel juhtudel veebilehte IE10-ga vaadates ei pruugi ReportViewer 2010 aruande sisu näidata, ilub tühi valge vorm, kusjuures Firefox ja Chrome vormi sisu näitavad aga IE10 mitte.
IE10-jaoks saab asja korda serveri poolt X-UA-Compatible päise lisamisega, näiteks IE=EmulateIE9
Teisi sirvikuid päise X-UA-Compatible pealepanek ei mõjuta
reede, 24. mai 2013
laupäev, 13. aprill 2013
VisualStudio2012 Update2 teeb WindowsXP jaoks C++ MFC projektid katki
Kui VisualStudio 2012 Update1 lisas võimaluse MFC C++ projekt kokku lasta ka WindowsXP peal töötamiseks, ehk projekti Configuration Properties -> Toolset -> tuli valida VisualStudio 2012 -Windows XP (v110_xp) ning valmis treitud exe läks käima ka WindowsXP peal siis VisualStudio 2012 Update2 on selle asja katki teinud ehk endist viisi programmi kokku lastes ja WindowsXP käivitades näeme ekraanil viga:
The procedure entry point InitializeCriticalSectionEx could not be located in the dynamic link library KERNEL32.dll
Kui rakendus kannatab saab programmi WindowsXP peal taas käima kui projekti Configuration Properties -> Toolset seada VisualStudio2010 peale
The procedure entry point InitializeCriticalSectionEx could not be located in the dynamic link library KERNEL32.dll
Kui rakendus kannatab saab programmi WindowsXP peal taas käima kui projekti Configuration Properties -> Toolset seada VisualStudio2010 peale
teisipäev, 19. märts 2013
SqlDataSource FilterParameters dünaamiline seadmine
SqlDataSource on abiks võimalus andmebaasist päringute tegemiseks eriti siis, kui vaja mõni veebivorm kokku lohistada. Lisaks võimaldab FilterParameters panna peale täiendava filtri andmebaasist saadud tulemustele.
Näiteks kui on vaja andmebaasist saadud infot filtreerida algus- ja lõppkuupäeva järgi siis
määrad SqlDataSource FilterParameters parameetrid
<FilterParameters>ja koodis sätid peale FilterExpressioni
<asp:Parameter Type="DateTime" Name="Algus" />
<asp:Parameter Type="DateTime" Name="Lopp" />
</FilterParameters>
this.SqlDataSourceArved.FilterParameters["Algus"].DefaultValue=Convert.ToDateTime(this.valitudaasta+"-01-01").ToShortDateString(); this.SqlDataSourceArved.FilterParameters["Lopp"].DefaultValue=Convert.ToDateTime(this.valitudaasta+"-01-01").AddYears(1).AddDays(-1).ToShortDateString();
string fil = "account_date >= #{0}# AND account_date <= #{1}#"; //kuupäev käib # vahele
this.SqlDataSourceArved.FilterExpression = fil;
ja seejärel GridView-le DataBind() ehk teeme päringu andmebaasi ja mis sealt andmebaasist kätte saame, sinna paneme täiendava filtri otsa. Sobib sageli GridView vormidele vürtsi lisamiseks, et andmed paremini hoomatavad oleksid
Kui aga vaja mitu hüpikmenüüd GridView-le lisada, ehk filtreerida muutuva arvu FilterParameters parameetrite järgi tuleb teha käsitööd, näiteks niimoodi, kus alguses tõmbad kõik FilterParameter parameetrid maha ja lisad seejärel ükshaaval juurde
string fil = "";
this.SqlDataSourceArved.FilterParameters.Clear(); //olemasolevad parameetrid minema
if (this.valitudKorrus != "") //filtreerib korruse järgi
{
this.SqlDataSourceArved.FilterParameters.Add( new Parameter("serviceId",TypeCode.String,this.valitudKorrus));
fil = "services_ID = '{0}'"; //string tüübi korral parameeter märkida '{0}'
}
if (this.valitudLeping != "") //filtreerib ka lepingu järgi
{
this.SqlDataSourceArved.FilterParameters.Add(new Parameter("contractId", TypeCode.UInt32, this.valitudLeping));
if (fil == "")
{
fil = "contracts_ID = {0}";
}
else
{
fil += " AND contracts_ID = {1}";
}
}
this.SqlDataSourceArved.FilterExpression = fil;
tulemuseks kodukootud hüpikmenüüdega GridView
Teada tuleb,et filtri püsivuse säilitamiseks tuleb FilterExpression seada ka GridView Sorting eventis. Siis säilib filter ka tabeli tulpade sorteerimise järel
esmaspäev, 4. veebruar 2013
DropDownListi täitmine väärtuse järgi sorteerimisega ListItem massiivist
Kui vaja asp:DropDownList täita sorteerituna ListItem massiivi väärtuste järgi saab seda teha nii:
ListItem[] items // siin on võti-väärtus andmepaaridena andmed
//sorteerime väärtuse järgi
System.Array.Sort(items, new myListItemComparer());
// item on nüüd sorteeritud
ListItemCollection col = new ListItemCollection();
//lisame kollektsiooni
for (int i = 0; i < items.Length; i++)
{
col.Add(new ListItem(items[i].Value,items[i].Text));
}
//paneme andmed külge
this.DropDownList1.DataSource = col;
this.DropDownList1.DataTextField = "Text";
this.DropDownList1.DataValueField = "Value";
this.DropDownList1.DataBind();
//väärtuse järgi sorteerimiseks vajalik klass
public class myListItemComparer : IComparer
{
int IComparer.Compare(object x, object y)
{
ListItem item_1 = x as ListItem;
ListItem item_2 = y as ListItem;
return item_1.Value.CompareTo(item_2.Value);
}
}
Kindlasti saab ka kuidagi lihtsamini
ListItem[] items // siin on võti-väärtus andmepaaridena andmed
//sorteerime väärtuse järgi
System.Array.Sort(items, new myListItemComparer());
// item on nüüd sorteeritud
ListItemCollection col = new ListItemCollection();
//lisame kollektsiooni
for (int i = 0; i < items.Length; i++)
{
col.Add(new ListItem(items[i].Value,items[i].Text));
}
//paneme andmed külge
this.DropDownList1.DataSource = col;
this.DropDownList1.DataTextField = "Text";
this.DropDownList1.DataValueField = "Value";
this.DropDownList1.DataBind();
//väärtuse järgi sorteerimiseks vajalik klass
public class myListItemComparer : IComparer
{
int IComparer.Compare(object x, object y)
{
ListItem item_1 = x as ListItem;
ListItem item_2 = y as ListItem;
return item_1.Value.CompareTo(item_2.Value);
}
}
Kindlasti saab ka kuidagi lihtsamini
reede, 5. oktoober 2012
MERGE käsuga puuduvate ridade lisamine tabelmuutujasse
On selline tabelmuutuja
DECLARE @tulem TABLE ( WORKER NVARCHAR(40) COLLATE DATABASE_DEFAULT, HOUSES_GROUPS_ID INT, TOTAL INT DEFAULT 0) ja esialgne päring annab tabeli sisuks
aga vaja näidata ka puuduolevaid 0 ridu, ehk saada selline tulemus
ehk lisame KAMPUS_OLLE-le puudu oleva HOUSES_GROUPS_ID 42 korral koguse 0
MERGE lause võib olla selline:
MERGE @tulem AS Target
USING ( SELECT DISTINCT WK.WORKER, HG.HOUSES_GROUPS_ID FROM @tulem WK CROSS APPLY ( SELECT DISTINCT HOUSES_GROUPS_ID FROM @tulem ) AS HG
) AS Source (WORKER, HOUSES_GROUPS_ID) ON (Target.HOUSES_GROUPS_ID = Source.HOUSES_GROUPS_ID AND Target.WORKER = Source.WORKER)
WHEN NOT MATCHED BY TARGET THEN
INSERT (HOUSES_GROUPS_ID, WORKER) VALUES (Source.HOUSES_GROUPS_ID, Source.WORKER);
Sisemine päring MERGE lauses:
SELECT DISTINCT WK.WORKER, HG.HOUSES_GROUPS_ID FROM @tulem WK CROSS APPLY ( SELECT DISTINCT HOUSES_GROUPS_ID FROM @tulem ) AS HG
annab WORKER ja HOUSES_GROUPS_ID ristkorrutise
ja sealt mestib WHEN NOT MATCHED puuduolevad lisaks algsesse tabelisse.
Kuna @tulem TOTAL INT DEFAULT 0 vaikeväärtus on 0 pannakse see ka vaikimisi puuduvatele väärtuseks
DECLARE @tulem TABLE ( WORKER NVARCHAR(40) COLLATE DATABASE_DEFAULT, HOUSES_GROUPS_ID INT, TOTAL INT DEFAULT 0) ja esialgne päring annab tabeli sisuks
aga vaja näidata ka puuduolevaid 0 ridu, ehk saada selline tulemus
ehk lisame KAMPUS_OLLE-le puudu oleva HOUSES_GROUPS_ID 42 korral koguse 0
MERGE lause võib olla selline:
MERGE @tulem AS Target
USING ( SELECT DISTINCT WK.WORKER, HG.HOUSES_GROUPS_ID FROM @tulem WK CROSS APPLY ( SELECT DISTINCT HOUSES_GROUPS_ID FROM @tulem ) AS HG
) AS Source (WORKER, HOUSES_GROUPS_ID) ON (Target.HOUSES_GROUPS_ID = Source.HOUSES_GROUPS_ID AND Target.WORKER = Source.WORKER)
WHEN NOT MATCHED BY TARGET THEN
INSERT (HOUSES_GROUPS_ID, WORKER) VALUES (Source.HOUSES_GROUPS_ID, Source.WORKER);
Sisemine päring MERGE lauses:
SELECT DISTINCT WK.WORKER, HG.HOUSES_GROUPS_ID FROM @tulem WK CROSS APPLY ( SELECT DISTINCT HOUSES_GROUPS_ID FROM @tulem ) AS HG
annab WORKER ja HOUSES_GROUPS_ID ristkorrutise
ja sealt mestib WHEN NOT MATCHED puuduolevad lisaks algsesse tabelisse.
Kuna @tulem TOTAL INT DEFAULT 0 vaikeväärtus on 0 pannakse see ka vaikimisi puuduvatele väärtuseks
kolmapäev, 26. september 2012
Firefox 15.0.1 ja Eesti ID-kaart
Peale Firefoxi uuendamist ei pruugi ID-kaart enam töötada.
Näiteks pillub viga Veakood: ssl_error_handshake_failure_alert
Taas käima saamiseks kontrolli menüüst
Tööriistad -> Lisad -> Laiendused menüüst üle, et "Estonian ID- card PKCS 11 module loader" oleks lubatud
Näiteks pillub viga Veakood: ssl_error_handshake_failure_alert
Taas käima saamiseks kontrolli menüüst
Tööriistad -> Lisad -> Laiendused menüüst üle, et "Estonian ID- card PKCS 11 module loader" oleks lubatud
esmaspäev, 24. september 2012
trace.axd piirangu reegel UrlScani jaoks
trace.axd on fail mida võib pärida, et saada infot ASP.NET veebirakenduse parameetrite ja muutujate kohta.
Igaks juhuks võib UrlScan-iga trace.axd pärimise tõkestada et vältida selle pahatahtlikku kasutamist.
Reeglistik koosneks urlscan.ini failis järgmistest komponentidest :
RuleListi kaasame uue lisatava KeelatudAxd reegli
RuleList=SQLSystimine,XSSSystimine,KeelatudAxd
KeelatudAxd reeglis määrame ära, et skaneerime Url-ipealt ning mõjub *.axd failidele ja viitame AxdKeelatud nimekirjale
;reegel *.axd failide jaoks
[KeelatudAxd]
AppliesTo=.axd
DenyDataSection=AxdKeelatud
ScanUrl=1
DenyUnescapedPercent=1
DenyDataSection nimekirjas loetleme ülesse axd failid mille poole pöördumise keelame
;ei luba pärida trace.axd faili
[AxdKeelatud]
trace.axd
UrlScan logifailis näeb trace.axd faili poole pöördumise tõkestamine välja niimoodi
GET /trace.axd Rejected rule+'KeelatudAxd'+triggered URL - trace.axd
Igaks juhuks võib UrlScan-iga trace.axd pärimise tõkestada et vältida selle pahatahtlikku kasutamist.
Reeglistik koosneks urlscan.ini failis järgmistest komponentidest :
RuleListi kaasame uue lisatava KeelatudAxd reegli
RuleList=SQLSystimine,XSSSystimine,KeelatudAxd
KeelatudAxd reeglis määrame ära, et skaneerime Url-ipealt ning mõjub *.axd failidele ja viitame AxdKeelatud nimekirjale
;reegel *.axd failide jaoks
[KeelatudAxd]
AppliesTo=.axd
DenyDataSection=AxdKeelatud
ScanUrl=1
DenyUnescapedPercent=1
DenyDataSection nimekirjas loetleme ülesse axd failid mille poole pöördumise keelame
;ei luba pärida trace.axd faili
[AxdKeelatud]
trace.axd
UrlScan logifailis näeb trace.axd faili poole pöördumise tõkestamine välja niimoodi
GET /trace.axd Rejected rule+'KeelatudAxd'+triggered URL - trace.axd
Tellimine:
Postitused (Atom)







