- Honor Magic7 Lite - erősítést kérek
- Honor Magic6 Pro - kör közepén számok
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- MIUI / HyperOS topik
- Xiaomi 14T Pro - teljes a család?
- Bemutatkozott a Poco X7 és X7 Pro
- Az éj sötét és tele van Xiaomi 14T-vel
- Hat év támogatást csomagolt fém házba a OnePlus Nord 4
- Ekkora lehet az iPhone Air és a Galaxy Slim akkumulátora
- Fotók, videók mobillal
Új hozzászólás Aktív témák
-
x007
tag
válasz martonx #3849 üzenetére
Ja igen, EF-fel nem megy a ToString (wtf). Pár ötlet, ami eszembe jutott:
- csinálsz egy view-t amiben stringként jelenik meg a dátum (meh)
- tárolt eljárás (meh)
- parszolod a beírt értéket, ez alapján csinálsz egy .Year == x && .Month == y ..stb feltételt (munkás)
- más filter a gridhez, mert amúgy sem túl hatékony így keresni a db-ben (nem ismerem a grid, valsz ez is munkás lehet, de szerintem összességében ez a legjobb)[ Szerkesztve ]
-
x007
tag
válasz martonx #3840 üzenetére
Ez itt a Linq to SQL lekérdezés:
MyDataContext ctx = new MyDataContext();
var q = ctx.Things.Where(p =>
p.Date.Value.ToString().Contains("2011"));A háttérben ilyen SQL hajtódik végre:
SELECT [t0].[Id], [t0].[Date]
FROM [dbo].[Thing] AS [t0]
WHERE (CONVERT(NVarChar(MAX),[t0].[Date])) LIKE @p0Teljesen jól működik, ötletem sincs mit lehet ezen elrontani
[ Szerkesztve ]
-
x007
tag
Igen, nekem is leesett az állam, mikor múltkor mértem, a CLR-től nem mutattak túl nagy eltérést a V8 eredményei. Persze a benchmarkaim nem voltak túl összetettek, de régen ilyeneknél is nagyon nagy eltérések voltak. Valszeg a type inference hozott ilyen drasztikus változásokat.
[ Szerkesztve ]
-
x007
tag
válasz martonx #3618 üzenetére
WPF-ből? Kérlek szépen minden egyes új .NET megjelenéskor. Nem leszek google helyetted.
ilyen erővel a webforms-ból is jön ki minden egyes .Net verziókor egy újabb
Ennyire erővel? Minden egyes .NET release esetén szignifikáns újítások voltak WebFormsban, még tán több is, mint WPF esetén.
[ Szerkesztve ]
-
x007
tag
válasz martonx #3612 üzenetére
hogy simán használható
Természetesen, amíg a kódot nem kell karbantartani... A dinamikus jellegéből adódóan olyan tooling hátrányban van, hogy ember legyen a talpán aki egy több száz
osztálybólprototypeból álló komplex alkalmazást karbantart. Persze lehet mondani, hogy fedjünk le mindent unit testekkel, én meg azt mondom, hogy majd a szabad idődből nyugodtan, de munkaidőként nem fizetem meg... -
x007
tag
válasz martonx #3610 üzenetére
mert évek óta nem fejlesztik
Maradjunk annyiban, hogy te nem tudsz róla, hogy fejlesztik.
Nagyon rövid időn belül a HTML5-ös cuccok fogják elárasztani a win8-at
Persze, ahogyan az iOS-t és Android-ot is árasztják el az UIWeb alapú tákolmányok... oh wait
erre pedig az egyetlen jelenlegi eszköz a Html5
Itt is maradjunk annyiban, hogy te nem tudsz más alternatívákat.
-
x007
tag
válasz martonx #3536 üzenetére
Nem érzem, hogy ez trükközés lenne. Ha be lehetne en block állítani, szerinted az ASP.NET miben tárolná? Session vagy cookie, más lehetőség nem nagyon van.
Én annyit változtatnék, hogy a session változót teljesen kihagynám a játékból, a filter mindig a cookieból olvasná az aktuális nyelvet, így a Session_Start se kellene. A filter pedig lehet globalis, így onnantól nem is kell a továbbiakban törődni az egésszel.
Ez ugyan app függő, de tán szebb lehet, ha az aktuális nyelv a url-ben lenne tárolva. -
x007
tag
válasz zedecske #2641 üzenetére
Nem ártana helyesen értelmezni a használt metódus dokumentációját. link
Ebből már tisztán látszik, hogy hülyeséget csinálsz. Helyesen:
Directory.SetCurrentDirectory(dirPath);
string filePath= Path.GetFullPath("counter.dat");
if (File.Exists(filePath))
{
//kod;
}Egyébként én inkább a Path.Combine használatát javasolom, eképpen:
string filePath= Path.Combine(dirPath, "counter.dat");
if (File.Exists(filePath))
{
//kod;
}[ Szerkesztve ]
-
x007
tag
WPF-ben van 3D prezentáció támogatás, itt egy tutorial:
http://kindohm.com/technical/WPF3DTutorial.htmEgyébként valamivel többet kéne tudni az alkalmazásról. Ha nem ez a 3D megjelenítés a túlnyomó része, és csak egyszerű dolgokat kéne megjeleníteni, akkor valószínűleg ez is elég lesz. Ellenkező esetben lehet valami komolyan framework-re lenne szükség.
[ Szerkesztve ]
-
x007
tag
Nem, az equals is referencia egyezést vizsgál alapértelmezettként, ha ezt logikai egyezésre akarod módosítani, akkor írd felül.
Igen a példa jó:
public bool Equals(Person other)
{
if (other == null)
return false;
if (this.uniqueSsn == other.SSN)
return true;
else
return false;
}
public override bool Equals(Object obj)
{
if (obj == null)
return base.Equals(obj);
Person personObj = obj as Person;
if (personObj == null)
return false;
else
return Equals(personObj);
}Itt az történik, hogy a Equals(object) metódus megnézi, hogy Person típusú objektumot kapott-e, ha igen továbbdobja az Equals(Person) metódusnak, ami a logikai egyezést vizsgálja.
-
x007
tag
Referencia típusoknál az equality operator azt vizsgálja, hogy a két referencia ugyanarra az objektumra mutat-e, de ezt operator overloading-gal megmásíthatod. Referencia típusoknál ez nem javasolt. Inkább írd felül az Equals metódust, vagy még jobb, ha az IEquatable generikus interfészt implementálod (ebben az esetben is írd felül az Equals metódust). Ha nem rendelkezel az osztály felett, javasolt egy összehasonlító osztály létrehozása az IEqualityComparer generikus interfész implementálásával.
[ Szerkesztve ]
-
x007
tag
Én Behavior-t írnék, két ok miatt:
- designerrel (Blend) is könnyen rádobhatod a controllra
- újrafelhasználhatóságItt egy tutorial:
http://www.wpftutorial.net/Behaviors.html -
x007
tag
válasz ArchElf #1709 üzenetére
Röviden összefoglalom:
Ez egy SOA framework, a lényege, hogy kommunikációs végpontokat (Endpoint) tudsz definiálni.A végpontokat meghatározza: ABC
Address: A végpont címe (többféle URI van, a bindingtól függ, hogy milyet kell használni)
Binding: A végpontnál használt protokoll, ebből többféle gyári megvalósítás van: [link]
Contract: Ez végpont interface-e, ami meghatátozza, hogy milyen műveleteket lehet végrehajtani.Itt egy nagyon egyszerű példa, ami szerintem a Te igényeidet is fogja fedni [link]
[ Szerkesztve ]
-
x007
tag
válasz ArchElf #1657 üzenetére
Én a beépített megoldást szoktam használni. Elég egyszerű: vannak üzenet források (TraceSource), amikbe küldöd az üzeneteket. Ezeket a prioritásuk (TraceLevel) szerint tudod szétosztani (Switch, EvenTypeFilter) a loggoló komponensekhez (TraceListener).
Gondolom ez kellene Neked, de bevallom én még nem próbáltam .
-
x007
tag
-
x007
tag
Nem hülyeség, az általád linkelt előző problémánál is ugyanaz volt a baj okozója. Csak egyszer példányosíts System.Random osztályt, és ugyanannak a példánynak hívd a Next metódusát.
var a1 = (new Random()).Next()
var a2 = (new Random()).Next()helyett:
var rnd = new Random();
var a1 = rnd.Next()
var a2 = rnd.Next() -
x007
tag
Ugyanazt a System.Random példányt használd fel a véletlen számok generáláshoz. A System.Random default konstruktora az Environment.TickCount propertyt adja meg seedként, ami nagyon rövid időintervaluumon belül ugyanannyit ad vissza, így ugyanazok a számokat fogja generálni.
Szerk: jaa látom ezt nem is Te csináltad, a cikkben van egy hozzászólás, ugyanazt írja mint én
[ Szerkesztve ]
-
x007
tag
Gondolom igényed oka messzemenőbb, minden programot külön partícióra akarsz telepíteni. (Most tekintsünk el attól, hogy én ennek semmi értelmét nem látom ) Ezt szerintem érdemes alacsonyabb szinten megoldani, hogy az ilyen jellegű szívásokat elkerüljük.
A Program Files dirt linuxosan egy külön partícióra kéne mountolni.
Lépések:
0: Legyen egy szűz partíciód (drive legyen most E: )
1: SysInternals ProcessExplorer letöltése
2: Goto csökkentett mód
3: PE-vel nézd meg, hogy milyen servicek / processek fognak Program Files dirben lévő erőforrást, ezeket lődd ki
5: Program Files tartalmának másolása D-re
6: Program Files tartalmának törlése
7: E: mountolása a C:\Program Files dirhez
8: Restart
9: EnjoyVirtuális gépen most kipróbáltam és teljesen jól működött. Dev rendszer copy, szóval nem sok minden volt rajta, ezért szívás se volt semmi. (A csökkentett mód nagyon sokat könnyít a dolgon)
Hosszútávú megbizhatóságról nem tudok nyilatkozni, de elvben nem kéne, hogy probléma legyen.[ Szerkesztve ]
-
x007
tag
Megnéztem Refectorral a usingot, és tényleg úgy van ahogy írtad...
Kicsit utána gondolva:
Thread.Abort ellen hogyan védekeznél? Az bárhol történhet, catch vagy finally ágban is, súlyos inkonzisztenciát eredményezve. Nekem nem volt most semmi jó ötletem... így nézve már nem is igazán az a probléma, hogy a try-n kívülre rakja az objpéldányosítást a using, hanem sokkal messzemenőbb.Egyébként a gyakorlatban ez a szituáció szerintem nem játszik, mert a hívó fél szokott impersonationt csinálni, nem a hívott.
[ Szerkesztve ]
-
x007
tag
Elnéztem amit írtál, elnézést... De az eredményen nem változtatott
static bool admin = false;
private static void IAmSoEvil()
{
try
{
DoTheThing();
}
catch(Exception ex)
{
if (!Exploit())
{
throw;
}
}
}
private static bool Exploit()
{
Console.WriteLine(admin);
return false;
}
private static void DoTheThing()
{
try
{
admin = true;
DoTheAdminThing();
}
finally
{
admin = false;
}
}
private static void DoTheAdminThing()
{
throw new Exception();
}[ Szerkesztve ]
-
x007
tag
válasz ArchElf #1493 üzenetére
Ez más, próbáld ki (false-t fog kiírni)
static bool admin = false;
private static void IAmSoEvil()
{
try
{
DoTheThing();
}
catch(Exception ex)
{
if (true)
{
Console.WriteLine(admin);
}
}
}
private static void DoTheThing()
{
try
{
admin = true;
DoTheAdminThing();
}
finally
{
admin = false;
}
}
private static void DoTheAdminThing()
{
throw new Exception();
}Ha jól értelmeztem a linkedet akkor azt írták, hogy az exception dobása két fázisban történik, először megkeresi a catch ágat, amiben lekezelhető a kivétel, ezért kiértékeli a when függvényt. Második fázisban végrehajtja a finally-ket és a megtalált catch ágat.
Mivel ezek 5 éves cikkek, elképzelhető, hogy ezt a mechanizmust javították már azóta (jogos lenne). Nincs VB-m, hogy kipróbáljam...
[ Szerkesztve ]
-
x007
tag
válasz ArchElf #1487 üzenetére
Ott nem kell elkapnod az exceptiont, elég ha tryfinally-t használsz. Egyébként szerintem ilyen esetekben érdemes csinálni egy Scope : IDisposable osztályt (lsd TransactionScope), ami transzparensen kezeli a külső "erőforrást". Impersonation esetén nekem így nézett ki:
using(new ImpersonationScope(domain, user, password))
{
}[ Szerkesztve ]
-
x007
tag
válasz Gregorius #1485 üzenetére
Néhány esetben azért indokolt lehet, ha nem akarod, hogy leálljon az alkalmazás. AppDomain.UnhandledException ugyan elkapja a nem kezelt kivételt, de a process elszáll.
Én például a worker szálak kódját szoktam trycatchException blockba tenni, így a catch elkapja a nem várt kivételeket, naplózhatom, és az alkalmazás sem borul.
Persze ennek használatának feltétele, hogy az alkalmazás semmikép se kerüljön inkonzisztens állapotba. Tudom... nem szép... ütemező alkalmazásnál még "végtelen ciklust" is okozhat, szóval azért óvatosan kell vele bánni.Naplózó rutinnál (pl TraceListener) is érdemes lehet a biztonság kedvéért elkapni mindent. Mondjuk ez se túl szép...
-
x007
tag
válasz FehérHolló #1427 üzenetére
"...,hogy miért irtózol a BackgroundWorker nélküli marshallozástól"
-
x007
tag
válasz FehérHolló #1422 üzenetére
Nem értem, hogy ettől miért lenne elavult. És azt se értem, hogy miért irtózol a BackgroundWorker nélküli marshallozástól, szerintem nem egy bonyolult dolog...
Probléma akkor lehet, ha nagyon gyakran akarsz a GUI-hoz hozzányúlni. Ilyenkor érdemes bufferezni a kéréseket marshal előtt, majd egyszerre átadni egy "nagyobb" adagot. Ez az ami egyedül gondot okozhat szvsz.
-
x007
tag
válasz FehérHolló #1418 üzenetére
Nem elavult, minden GUI framework vezérlése egyszálú. Voltak próbálkozások többszálú GUI kialakítására, de nem igazán jött össze senkinek, amolyan Failed Dream maradt.
-
x007
tag
A problémától függetlenül, ne használd a VS2008 designert, elég használhatatlannak tartom , mindent markup editorral csinálj meg.
-
x007
tag
válasz REDeath #1409 üzenetére
Az nem probléma szerintem, hogy beleszúr scripteket. Amit írtam, abban arra gondoltam, hogy ha a vezérlők beszúrnak olyan elemeket is, amit nem akarsz vagy amiről nem tudsz, akkor pl css írásakor több szívás lesz.
Igazándiból azt kell mérlegelni, hogy megéri-e azt a plussz időt belefektetni, hogy saját megoldásod legyen. Codebehindba ne nagyon írj lekérdezéseket, használj ObjectDataSource-t, az teljes szabadságot ad .
-
x007
tag
válasz REDeath #1406 üzenetére
ASP.NET WebForms-ban szerintem c# kóddal való markup létrehozást mindenképpen kerülni kell, teljesen karbantarthatlan lesz tőle a kód, amit lehet próbáljuk meg dekleratív módon megoldani.
Lista vezérlőkből én a ListView-t tudom javasolni, mert afölött teljesen te rendelkezel, nem szemeteli tele a renderelt markupot olyan tagekkel, amit nem is akarsz, hogy ott legyen. A sablonokban használhatsz ASP.NET vezélőket, HTML tageket is, ami csak jól esik. Keress példákat, biztos tetszeni fog neked is .
ASP.NET MVC-ben (most ismerkedem vele) lehet ilyet csinálni (aspx fájlban):
<% foreach (var product in ViewData) { %>
<div>
<%=product.Category.CategoryName %>
</div>
<%} %>Ez csúnyának tűnhet elsőre, de nekem egyre jobban tetszik .
[ Szerkesztve ]
-
x007
tag
válasz Gregorius #1404 üzenetére
Oh, itt már volt új info Kicsit utána néztem.
SynchronizationContext.Current
WinForms esetén: WindowsFormsSynchronizationContext
A Send/Post metódus a Control.Invoke/BeginInvoke metódust hívja meg.
WPF esetén: DispatcherSynchronizationContext
A Send/Post metódus a Dispatcher.Invoke/BeginInvoke metódust hívja meg
Szóval ez egy általános wrapper a GUI rendszerek szinkronizációs megoldása fölött. És már látom is miért jó ez...
Van pl. a BackgroundWorker, ami az AsyncOperationManager osztályon alapul, ami a SynchronizationContext-et használja a szinkronizáció megvalósításához. Ezért a BackgroundWorker WinForms és WPF alatt is tud működni. Sőőőt, ha saját ablakozó rendszert írsz, akkor megoldhatod, hogy az alatt is működjön .
Tetszik...
[ Szerkesztve ]
-
x007
tag
Szinkronizálni az Invoke metódussal lehet, tehát a fenti kód így módosítva működni fog.
ThreadPool.QueueUserWorkItem((s) =>
{
this.Invoke(new Action(() =>
{
personBindingSource.Add(new Person() { FirstName = "John", LastName = "Smith" });
}));
});A 'this' egy Form objektumra hivatkozik ezesetben.
Ha ehhez tartod magad, akkor nyílván thread safe lesz a grid, mivel csak a GUI szálon nyúlsz hozzá.
-
x007
tag
válasz FehérHolló #1395 üzenetére
WinForms elemekhez csak a GUI szálból férhetsz hozzá, különben kivétel dobódik (ki lehet kapcsolni, de ne tegyük, nem kibaszásból csinálták . Ezzel kizárva az Items propertyn keresztül való hozzáadás.
Ha BindingSource-t használsz, akkor is kivétel dobodik, hiszen a BindingSource is egy WinForms control.
personBindingSource.Add(new Person() { FirstName = "Jakab", LastName = "Gipsz" });
ThreadPool.QueueUserWorkItem((s) =>
{
personBindingSource.Add(new Person() { FirstName = "John", LastName = "Smith" });
});BindingList-tel viszont lehet másik szálból hozzáadni elemet. Engem ez személy szerint meglepett, mert WPF-be ilyenkor is kivétel dobódik (szerintem ez utóbbi a helyes működés).
var collection = new BindingList<Person>();
dataGridView1.DataSource = collection;
collection.Add(new Person() { FirstName = "Jakab", LastName = "Gipsz" });
ThreadPool.QueueUserWorkItem((s) =>
{
collection.Add(new Person() { FirstName = "John", LastName = "Smith" });
});Én azt tanácsolom, hogy csak GUI szálból adj az adatforráshoz elemet. Nagy szívásokba eshetsz bele, ha nem tartod ehhez magad.
-
x007
tag
Nehezen tudtam elképzelni, de feltelepítettem az IDE-t, ott van az:
[link]Innentől annyi a dolgod, hogy csinálj egy különálló alkalmazás szerver szoftvert, ami az adatbázis műveleteket végzi. A különböző funkciókat publikáld szolgáltatásként. Importáld a szolgáltatást az SL alkalmazásba, a generált proxy osztállyal el fogod tudni érni a funkciókat.
-
x007
tag
Igen, ez VB6-nak tűnik.
Kérdésekre válasz:
MessageBox-ra példa:
result =
MessageBox.Show(
this,
message,
caption,
MessageBoxButtons.YesNo,
MessageBoxIcon.Question,
MessageBoxDefaultButton.Button1);http://msdn.microsoft.com/en-us/library/ctd56yay.aspx
Dátum formázásra példa:
DateTime date = DateTime.Now;
date.ToString("yyyy.MM.dd hh:ss");[ Szerkesztve ]
-
x007
tag
-
x007
tag
válasz Gregorius #1242 üzenetére
DataSet használatakor az adatbázist cacheljük a memóriába, a lekérdezések a memóriában hajtódnak végre. EF és L2S használata esetén a lekérdezések mindig az adatbázis szerveren hajtódnak végre, ezért én nem sorolnám ezeket a kapcsolat nélküli adateléréshez. (sztem valahol a kettő között van ) Az adatmanipuláció mechanizmusa viszont valóban hasonló.
-
x007
tag
Tanulmányozd a Binding objektumot... Nagyon sokmindent meg lehet vele csinálni.
http://www.c-sharpcorner.com/UploadFile/mahesh/WPFDataBinding08012008233147PM/WPFDataBinding.aspx -
x007
tag
Linq to SQL
Entity FrameworkEzek nem alternatívái a DataSet-nek, mert kapcsolatalapú adatelérést biztosítanak ellentétben a DataSet-tel, ami kapcsolat nélküli adatelérést biztosít. Keress rá, hogy ezek mit jelentenek, nem akarok regélni .
Mérlegelni kell, hogy az alkalmazásodnak melyik jó. Én úgy gondolom, hogy egy szótár szoftvernek fölösleges betöltenie az összes szót a memóriába, így érdemes használni a fent említett két technológia közül az egyiket. Linq to SQL-t szoktam használni, de a jövő egyértelműen az Entity Framework (mondjuk jelen állapotáról nem sok jót hallottam eddig ).
-
x007
tag
-
x007
tag
Olvass dokumentációt...
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx -
x007
tag
Jaaaa, WPF-ben nincsen gyári DoEvents, viszont van workaround:
private void button1_Click(object sender, RoutedEventArgs e)
{
button1.IsEnabled = false;
WpfApplication.DoEvents();
Thread.Sleep(3000);
button1.IsEnabled = true;
}
/// <summary>
/// Designates a Windows Presentation Foundation application model with added functionalities.
/// </summary>
public class WpfApplication : Application
{
private static DispatcherOperationCallback exitFrameCallback = new
DispatcherOperationCallback(ExitFrame);
/// <summary>
/// Processes all UI messages currently in the message queue.
/// </summary>
public static void DoEvents()
{
// Create new nested message pump.
DispatcherFrame nestedFrame = new DispatcherFrame();
// Dispatch a callback to the current message queue, when getting called,
// this callback will end the nested message loop.
// note that the priority of this callback should be lower than the that of UI event messages.
DispatcherOperation exitOperation = Dispatcher.CurrentDispatcher.BeginInvoke(
DispatcherPriority.Background, exitFrameCallback, nestedFrame);
// pump the nested message loop, the nested message loop will
// immediately process the messages left inside the message queue.
Dispatcher.PushFrame(nestedFrame);
// If the "exitFrame" callback doesn't get finished, Abort it.
if (exitOperation.Status != DispatcherOperationStatus.Completed)
{
exitOperation.Abort();
}
}
private static Object ExitFrame(Object state)
{
DispatcherFrame frame = state as DispatcherFrame;
// Exit the nested message loop.
frame.Continue = false;
return null;
}
}Megjegyzem, hogy ez továbbra se fogja teljes mértékig megoldani a problémát, mert az ablak ugyanúgy meg fog fagyni a DB kapcsolat tesztelésekor. (WinForms esetén is így lenne) Szóval mindenképpen javaslom a BackGroundWorker használatát.
-
x007
tag
A problémádat megoldja, hogyha a DisableControls() után meghívod a Application.DoEvents() metódust. Az ilyen megoldásokat azonban, ha lehet, kerüljük. Általánosságban elmondható, hogy időigényes feladatokat nem hajtunk végre a GUI szálon (ilyen egy vezérlő eseménye is, pl: Click), hanem egy új szálat hozunk létre, hogy a végrehajtás a háttérben történjen. Ezt könnyen megteheted a BackgroundWorker komponens segítségével, elég sok problémát levesz a programozó válláról.
Valami ilyet kéne csinálnod:
private void button1_Click(object sender, EventArgs e)
{
DbDetails arg =
new DbDetails
{
Server = ...,
Database = ...,
User = ...,
Password = ...,
};
connectStatusBar.Items[0] = "Testing connection...";
DisableControls();
backgroundWorker1.RunWorkerAsync(arg);
}
private class DbDetails
{
public string Server { set; get; }
public string Database { set; get; }
public string User { set; get; }
public string Password { set; get; }
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
DbDetails arg = e.Argument as DbDetails;
e.Result = TestConnection(arg.Server, arg.Database, arg.User, arg.Password);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null && (bool)e.Result)
{
//Sikerult csatlakozni
//TODO: Impl
}
else
{
//Nem sikerult csatlakozni
//TODO: Impl
}
}A DoWork eseménykezelőbe kell helyezned a kódot, amit a háttérben szeretnél végrehajtani. Fontos, hogy ebben nem hivatkozhatsz a Form-on található vezérlőkre szinkronizációs problémák miatt. Ezért van szükség jelen példában a DbDetails segédosztályra.
A RunWorkerCompleted eseménykezelő a feladat végrehajtása után mindig végrehajtódik. Ha valamilyen kivétel keletkezett, akkor azt a e.Error tulajdonságból kiolvashatod. Az e.Result tulajdonságból a DoWork eseménykezelőben beállított visszatérési érték olvasható ki.
[ Szerkesztve ]
-
x007
tag
válasz FehérHolló #1203 üzenetére
Pongyolán megfogalmazva: Az XML egy hierarchikus adatbázis, az SQL pedig relációs adatbázisokhoz van. Innentől nincsen értelme a kérdésnek . XPath segítségével lehet lekérdezéseket definiálni XML-hez.
http://en.wikipedia.org/wiki/XPath_1.0
A másik problémádra szerintem biztos, hogy nincsen beépített .NET osztály. Egy ilyet találtam viszont:
Nem próbáltam ki, de van egy olyan érzésem, hogy több bajod lesz vele, mintha magadtól írnád át a lekérdezéseket .
-
x007
tag
válasz Briganti #1194 üzenetére
Itt az adapter használata egyébként teljesen fölösleges.
openConnection();
dbCommand = new OleDbCommand(qText, dbConnection);
dbCommand .ExecuteNonQuery();
closeConnection();Másrészt: Csináltam neked egy kis DataSet tutorial videót anno. Miért nem úgy használod? Nem is kéne SQL parancsokat írnod, mert képes arra, hogy a DataSeten végrehajtott módosításokat (hozzáadás, törlés, érték módosítás) automatikusan végrehajtsa az adatbázisban. Nem teljesítménykritikus alkalmazásnál szerintem mindenképpen érdemes lenne használni.
[ Szerkesztve ]
-
x007
tag
Sokkal karbantarthatóbb így a kód. Sok textbox-ra már általános megoldást csinálnék (most nem raktam bele többet):
-
x007
tag
Én elég hamar működésre bírtam...
-
x007
tag
válasz Briganti #1134 üzenetére
http://www.speedyshare.com/files/20176158/DatasetTutorial.avi
Sztem érdemes csinálni egy Loading... ablakot (ami a program indulásakot jelenik meg) és abban feltölteni adapterekkel a táblákat. Használd a BackgroundWorker vezérlőt .
-
x007
tag
válasz Briganti #1126 üzenetére
Én nem raknám Formba a DataSet-et. Sztem úgy jársz a legjobban, hogyha generálsz az adatbázisból egy strongly typed datasetet és annak kód részébe csinálsz egy statikus tulajdonságot, amivel globálisan el lehet annak egy példányát érni. Így:
public partial class MyDataSet
{
private static MyDataSet _instance;
public static Cache Instance
{
get
{
if (_instance == null)
{
_instance = new MyDataSet();
}
return _instance;
}
}
}Így a programodban bárhon tudsz majd az adatokra hivatkozni, értelemszerűen így:
MyDataSet.Instance
-
x007
tag
válasz acélkemény #1127 üzenetére
http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.selectedindexchanged.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.listcontrol.selectedvaluechanged.aspx
Én azt gondoltam volna, hogy az alábbi esetben, ha cserélgeted a kiválaszott elemet, akkor a ValueChanged nem váltódik ki, mert a SelectedValue referencia nem változik. De kipróbáltam, tévedtem.
class ListItem
{
public string Value { get; set; }
public override string ToString()
{
return this.Value;
}
}
public Form1()
{
InitializeComponent();
ListItem item = new ListItem() { Value = "Hello World!" };
listBox1.Items.Add(item);
listBox1.Items.Add(item);
listBox1.Items.Add(item);
listBox1.Items.Add(item);
}Szerintem nincs köztük semmi különbség.
-
x007
tag
válasz acélkemény #1123 üzenetére
Amikor elhelyezed a UserControl példányt a formon, akkor tudod azt méretezni is. Az más kérdés, hogy a UserControl-ra helyezett vezérlőket lehet úgy konfigurálni, hogy érzékenyek legyenek a UserControl méretváltozására.
Az tabokat reprezentáló UserControl-okat én egymásra raktam úgy, hogy a Left, Top, Width, Height értékek megegyezzenek. Azt, hogy éppen melyik jelenjen meg, a Visible fogja meghatározni.
-
x007
tag
válasz acélkemény #1121 üzenetére
Nem tudom mire gondolsz .
A színes sávot dokkoltam a tetejére, így követi a UserControl méretét.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dock.aspxA GroupBox-nak pedig az Anchor tulajdonságát állítottam, hogy kövesse a UserControl méretét.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.anchor.aspx -
x007
tag
válasz acélkemény #1119 üzenetére
-
x007
tag
válasz acélkemény #1117 üzenetére
Első, egyszerű ötlet:
GroupBox helyett UserControl-t használj. Igaz, így több fájl fogja leírni az ablakod, de legalább normálisan tudod szerkeszteni.[ Szerkesztve ]
-
x007
tag
Talán a legegyszerűbb, hogyha XML fájlban tárolnád a Credentials adatokat, olvasáshoz/íráshoz a LinQ to XML-t ajánlom. Innen indulva mindent megtudhatsz:
http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.aspx
Jelszavakat hashelve tároljad. Ahhoz, hogy ne tudjon beletúrni mindenki, szerintem fájl hozzáférési jogokkal szabályozz.
-
x007
tag
Majdnem
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
Console.WriteLine("Osszeg: {0}, Atlag: {1}", n*(n+1) / 2, (double)(n+1) / 2.0);
}De lehet pl így is:
static void Main(string[] args)
{
int n = int.Parse(Console.ReadLine());
Console.WriteLine("Osszeg: {0}, Atlag: {1}",
Enumerable.Range(1, n).Sum(),
Enumerable.Range(1, n).Select(v => (double)v).Average());
}
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- 3D nyomtatás
- Jelentősen átdolgozná stratégiáját az ARM?
- Renault, Dacia topik
- Honor Magic7 Lite - erősítést kérek
- Honor Magic6 Pro - kör közepén számok
- Politikai mémek
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Digitális Állampolgárság Program
- Adatmentés - HDD - SSD - Flash
- Mostantól Tajvanon kívülre is viheti 2 nm-es node-ját a TSMC
- További aktív témák...
- Zsír ASUS TUF A16 Gamer Tervező Laptop 16" -30% AMD Ryzen 9 7845HX 16/1TB RTX 4060 8GB QHD 2,5 165Hz
- Szép! Lenovo Thinkpad T14 Strapabíró Laptop -60% 14" Bivaly Ryzen 5 PRO 4650U 6Mag 16/256 FHD LTE
- Új dobozos Lenovo IdeaPad Gaming 3 Gamer Laptop -20% 15,6" RYZEN 5 5500H 16/512 NVIDIA 2050 4GB FHD
- Dell 7410 Laptop 14" FHD/i7-10Gen/MS Office/DDR4 16Gb/1Tb M2/HDMI/USB-C/CAM/Wifi 1Év Gari 27% Áfá-s
- Apple Watch Ultra 2 49mm GPS+Cellular, 1 Év Garanciával