Most itt konkrétan a cím részre gondolsz?
Mert ott van 2 szóköz jah, de akkor csináljuk úgy, hogy van ott 2 szóköz. A tanár nem magyarázta el túl értelmesen.
A splittet nem ismerem, a substring/indexof -ot tanultam csak.
Most itt konkrétan a cím részre gondolsz?
Mert ott van 2 szóköz jah, de akkor csináljuk úgy, hogy van ott 2 szóköz. A tanár nem magyarázta el túl értelmesen.
A splittet nem ismerem, a substring/indexof -ot tanultam csak.
static void Main(string[] args)
{
int i;
string s = "K ov ác s Kálmán, 9999 Budapest, Rigó út 41.";
// a bemenet három részre bontható, melyeket a ", " karaktersorozat (1 vessző és 1 space) határol
string[] ss = s.Split(new string[] { ", " }, StringSplitOptions.None);
// első rész: vezetéknév + keresztnév
// feltesszük hogy a keresztnév egyben van, tehát az utolsó space után jön, így azt kell keresni
i = ss[0].LastIndexOf(' ');
// vezetéknév, space-eket kicseréli üres stringre, nagybetűs
Console.WriteLine(ss[0].Substring(0, i).Replace(" ", "").ToUpper());
// keresztnév, nagybetűs
Console.WriteLine(ss[0].Substring(i + 1).ToUpper());
// középső rész: irányítószám város (közöttük szóköz)
string[] cim1 = ss[1].Split(' ');
Console.WriteLine("{0} {1}", cim1[0], cim1[1]);
// utolsó rész, három részből áll: név típus házszám.
// felbontható három részre, a középső rész figyelmen kívül hagyható, helyette UTCA írható
string[] cim2 = ss[2].Split(' ');
Console.WriteLine("{0} UTCA {1}", cim2[0].ToUpper(), cim2[2]);
}
mivel nincs valami pontosan specifikálva a feladat, a minimumra törekedtem, csak azt csináltam meg, amit említettél, és csak olyan bemenetre működik, amit példaként írtál (space lehet a vezetéknévben)
minimális változás a bemeneten, és már nem is működik, legyen vele valami dolgod neked is
(gondolok itt ilyenre pl. hogy vessző után nincs space, vagy az utca neve több tagból áll, pl. Petőfi Sándor utca 1.)
Nevet regex-el könnyebb szétszedni, ha feltételezzük, hogy az összes név nagybetűvel kezdődik:
Regex:
Kov ács Lá szl ó -> Kovács László
Ád ámk a Ö dö n -> Ádámka Ödön
Sc hä ffer Brü n hil da Kl ár a -> Schäffer Brünhilda Klára
Kód: http://pastebin.com/FT9qQg3m
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
up
some men just wanna watch the world burn...
Két BindingSource kell, az első a BindingNavigator-nak (és a TextBox-oknak), a második pedig a GridView-nak. Az első BindingSource CurrentItemChanged eseményét pedig ehhez hasonlóan kell kitölteni (ha adatbázisról van szó):
private void bindingSource1_CurrentItemChanged(object sender, EventArgs e)
{
DataRowView drv = bindingSource1.Current as DataRowView;
bindingSource2.Filter = string.Format("KategoriaAzonosito = {0}", drv.Row["KategoriaAzonosito"].ToString());
}
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
koszonom szepen, este kiprobalom.
some men just wanna watch the world burn...
Sziasztok
VB2k8-ban hogyan hívok meg tárolt eljárást?
Már egy ideje googlizok, de nem igazán találok épkézláb mintát.
Ha esetleg vkinek lenne, nagyon megköszönném!
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
Én általában leprogramozom a dolgot a System.Data.SqlClient-en keresztül.
// saját függvény, de akár fixen is meg lehet adnistring
cs = GetConnectionString("testConnectionString");
using(SqlConnection con = new SqlConnection())
{
con.ConnectionString = cs;
con.Open();
using (SqlCommand cmd = con.CreateCommand())
{
//Beállítani, hogy a Command SP legyen
cmd.CommandType = CommandType.StoredProcedure;
//SP neve
cmd.CommandText = "LastSessionPage";
//Paraméterek hozzáadása
cmd.Parameters.Add(new SqlParameter("SID", SessionID));
//Return Value (vagy akár out) is paraméterben használandó
SqlParameter pret = new SqlParameter("RETURN_VALUE", SqlDbType.Int);
pret.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(pret);
cmd.ExecuteNonQuery();
rval = Convert.ToInt32(pret.Value);
}
}
Ha datasetet ad vissza a SP, akkor nyugodtan lehet ExecuteReaderrel indítani a cmd-t, és SqlDataReaderrel olvasni. A fenti esetben csak a "poén" kedvéért paraméterben jön vissza a visszatérési érték, ha select-tel egy értéket ad ki (aggregűációnál, mint pl itt), akkor nem kell vacakolni a Return paraméterrel, simán ExecuteScalar-ral kell futtatni a parancsot.
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
hello!
a tegnapi utbaigazitas utan sikerult elorebb haladnom, de meg most sem tokeletes.
kod - eddig jutottam, de a CurrentItemChanged esemeny nalam valahogy nem akar mukodni, pedig letezik.
ha a kikommentelt reszt is futtatom, akkor kiirja az 1-es KategoriaAzonositohoz tartozo termekeket, szoval a szures jo. probakent feldobtam egy textboxot(TextBox5), de nem sok hatassal van ra a CurrentItemChanged esemeny.
valakinek valami otlet?
elore is koszonom
some men just wanna watch the world burn...
Meghívja az eseményt? Ha nem akkor lehet, hogy nem adtad hozzá az eseménykezelőt...
bs1.CurrentItemChanged += new System.EventHandler(bs1_CurrentItemChanged);
Amúgy a szövegdobozoknál:
....Enable = False; helyett legyenek inkább ....ReadOnly = True;-k, úgy kijelölhető benne a szöveg, de nem szerkeszthető.
Ja, és használj inkább breakpointokat a debugolásra, ne ilyen
textBox5.Text = "aasdasdasdsa"; textboxokat
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
koszonom ismet
debugolni meg persze ugy szoktam, ez mar egy vegso elkeresedett debug volt : )
(#1563) stevve: de ez hazifeladat ~5 kategoria x 5 termekkel, csak az a baj, hogy ez a textboxos moka a kikotes a "Details" nezetnel :/
[ Szerkesztve ]
some men just wanna watch the world burn...
Ha ez házifeladat, akkor nem szóltam, de ha nem, akkor gondolkodj egyszerűbben:
Ha nem százas nagyságrendű a kategóriák száma, fogod a DataSet-et (vagy bármit) és a kategóriákat betolod egy legördülőbe és abban lépegetve a kiválasztott elem (SelectedItem) lesz a szűrő a gridre. Ez szerintem szebb megoldás és még talán gyorsabb is és nem fogsz elveszni a bindingsource-ok között sem és kevesebb lesz a copy-paste is.
Meg használj hibakezelést (try-catch) is, ha lehet. Az úgy szebb, mint hagyni elveszni a hibákat.
mod:
és konkrétan ezzel a binding cuccal kell megoldani? Csak mert a példa úgy nem életszerű, nem úgy szoktuk.
[ Szerkesztve ]
eh, lejárt az időm...
Akkor viszont talán érdemes azon elgondolkodni, hogy feltehetnél egy gombot, képet, amin mondjuk nyilak vannak és azok reprezentálák a lépéseket. Azokkal is lehet léptetni a Dataset-ben a következőre. Az OleDb is kikötés vagy Oracle és amiatt van ez?Bár távol álljon tőlem, hogy beledumáljak.
[ Szerkesztve ]
bocs, kicsusztam az idobol. itt a feladat leiras.
most egyelore csak az elso reszet csinaltam meg a feladatnak, aztan ha mar jol mukodik, akkor a vegleges projectba hibakezelessel egyutt bepakolom.
(#1564) stevve: van egy BindingNavigator-om, amivel leptetek, ha erre gondolsz.
"Az OleDb is kikötés vagy Oracle és amiatt van ez?"
jo hogy szolsz, csak suliban oracle-s cucc volt, gondolom azert maradt benne
[ Szerkesztve ]
some men just wanna watch the world burn...
Jah, látom, sok a megkötés. Én sosem használom a BindingNavigatort és úgy tapasztalom, más sem, ezért próbáltam más irányban, de akkor visszavonom.
Köszi szépen.
Nem is tudom mivel háláljam meg.
Igaz még ezen van mit dolgozni bőven, sőt megérteni is, de nagy segítség hogy oda van írva minden magyarázatként.
AE (Albert Einstein ) módszerét is megnézem, neked is köszi!
hello!
megint en. valaki tudna valami segitseget adni ahhoz, hogy hogy kellene a lekerdezeseket megvalositani? (nem konkret query kell)
feladat: itt
elore is koszonom
[ Szerkesztve ]
some men just wanna watch the world burn...
up+ leirom a gondolatmenetemet, javitsatok ki legyszives, ha valami rossz.
szoval letrehozok egy sqlconnectiont:
SqlConnection con = new SqlConnection();
con.ConnectionString = "UID:Admin";
megnyitom:
con.Open();
letrehozok egy sqladaptert es egy datasetet, amibe a query eredmenyet tarolom:
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet ds = new DataSet();
adapter.SelectCommand = new SqlCommand("SELECT * FROM Termekek WHERE KaterogiaAzonosito=1", con);
adapter.Fill(ds);
a datasetet beallitom a datagridview datasource-anak:
dgvForm1.DataSource = ds.Tables;
kapcsolat lezarasa:
con.Close();
elore is koszonom a segitseget
szerk: az egesz egy try catch blokkban van, es a a vegen dob egy: Format of the initialization string does not conform to specification starting at index 0 hibauzenetet
[ Szerkesztve ]
some men just wanna watch the world burn...
UID=Admin, de szerintem ez kevés lesz connectionstringnek
koszonom. mi kellene meg bele?
az app.configomban ez van:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="dbproba.Properties.Settings.Kapcsolat" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\adatok.mdb"
providerName="System.Data.OleDb" />
</connectionStrings>
</configuration>
some men just wanna watch the world burn...
Ha connectionstring-ként tárolod az app.configban, akkor úgy is kell kiolvasni onnan:
string cnString = ConfigurationManager.ConnectionStrings["kapcsolatNeve"].ConnectionString;
De mindenek előtt hozzá kell adni a referenciákhoz a System.Configuration.dll-t és a using blokkba is fel kell venni.
[ Szerkesztve ]
Még valami:
dgvForm1.DataSource = ds.Tables;
helyett
dgvForm1.DataSource = ds.Tables[0]; vagy ha van neve a táblának, az, máskülönben nem fogsz látni semmit a gridben.
kezdek kiegni : )
megcsinaltam, de ezt a hibauzenetet dobja.
kod
(#1573) stevve: ok. javitom. koszonom. javitva:
SqlConnection con = new SqlConnection();
string cnString = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
con.ConnectionString = cnString;
con.Open();
SqlDataAdapter adapter = new SqlDataAdapter();
dsAdatok ds=new dsAdatok();
adapter.SelectCommand = new SqlCommand("SELECT * FROM Termekek WHERE KaterogiaAzonosito=1", con);
adapter.Fill(ds);
dgvForm1.DataSource = ds.Termekek;
con.Close();
a
DataSet ds= new DataSet();
sort is atirtam:
dsAdatok ds=new dsAdatok();
[ Szerkesztve ]
some men just wanna watch the world burn...
Egybe is vehető a connstring, viszont az app.configos nevét kell használni.
con.ConnectionString = ConfigurationManager.ConnectionStrings["dbproba.Properties.Settings.Kapcsolat"].ConnectionString;
Szerintem jó a sima DataSet is, nem kell ezt túlcifrázni egy ekkora feladatnál.
Ha a Tables[0] is benne van, elvileg jó lesz. Szerintem az object reference a connectionstring miatt volt. Használj break pointokat debugoláskor.
mod:
Ezeket megmutathatnád még, ha nem megy, mert ezekről nincs infó a kódban, amit linkeltél:
dsAdatok dsAdatok;
KategoriakTableAdapter taKategoriak;
TermekekTableAdapter taTermekek;
[ Szerkesztve ]
No meg a finally-t érdemes használni a kapcsolat lezárásához, nem a try-ba betenni:
finally
{
con.Close();
}
Különben kivétel esetén nyitva maradhat.
Így talán szebb és jobb (a rendezést ne nézd...):
private void button1_Click(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["app.configban a connstring neve"].ConnectionString;
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet ds = new DataSet();
try
{
con.Open();
adapter.SelectCommand = new SqlCommand("SELECT * FROM Termekek WHERE KaterogiaAzonosito=1", con);
adapter.Fill(ds);
dgvForm1.DataSource = ds.Tables[0];
}
catch(Exception ex)
{
MessageBox.Show("hiba: " + ex.Message);
}
finally
{
con.Close();
{
}
[ Szerkesztve ]
atirtam, de most meg:
Keyword not supported: 'provider'. - ezt a connenctionstringnel irja.
ha esetleg meg szeretned nezni, akkor felraktam ide a projectet.
some men just wanna watch the world burn...
Jogos, most nézem, hogy az app.configban ez van:
"providerName="System.Data.OleDb"
a kódban pedig SqlConnection.
Jah, mondjuk a hibaüzenet nem pont ezt mondja...
[ Szerkesztve ]
Ilyen connectionstring nincs:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\adatok.mdb"
Mivel adtad hozzá?
szerintem a wizard csinalhatta, nem emlekszem, hogy belepiszkaltam volna :/
Server Explorer / Connect to Database, aztan
Data source: Microsoft Access Database File (OLE DB)
+kitalloztam neki az mdb filet
User Name: Admin
Password: <nincs>
aztan Test Connection - az nem irt hibat, asszem valahogy igy tortent.
[ Szerkesztve ]
some men just wanna watch the world burn...
hogyne lenne olyan connectionstring
SqlConnection-nél valóban nincs Provider, de OleDb-hez nem is SqlConnection kell
SqlConnection helyett OleDbConnection kell, és a többiből is Sql____ helyet OleDb____ osztályok kellenek
ez például tökéletesen lefut (csak ezt a részt piszkáltam, kicsit egyszerűsítettem + sűrítettem; de legalább produkál valami primitív működést )
OleDbConnection con = new OleDbConnection();
con.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\..\adatok.mdb";
try
{
OleDbCommand command = new OleDbCommand("select termekneve from termekek where termekazonosito between 1 and 5", con);
con.Open();
OleDbDataReader reader = command.ExecuteReader();
while (reader.Read()) { MessageBox.Show(reader[0].ToString()); }
reader.Close();
}
catch (Exception ex) { MessageBox.Show("hiba: " + ex.Message); }
finally { con.Close(); }
viszont ehhez az adapteres mókához abszolút nem értek (és megtanulni sincs kedvem most, mert nemsokára lejár a munkaidő és indulok haza ), azt majd valaki még megmondja neked, hogy hogyan kell
[ Szerkesztve ]
Értem. Sose használtam még varázslóval mdb-t. Sőt, utálom az Access-t.
megoldás:
OleDb-t kell használni, nem SqlCommandot!
private void button1_Click(object sender, EventArgs e)
{
var con = new OleDbConnection
{
ConnectionString =
ConfigurationManager.ConnectionStrings["dbproba.Properties.Settings.Kapcsolat"].
ConnectionString
};
var adapter = new OleDbDataAdapter();
var ds = new DataSet();
try
{
con.Open();
adapter.SelectCommand = new OleDbCommand("SELECT * FROM Termekek WHERE (KategoriaAzonosito = 1)", con);
adapter.Fill(ds);
dgvForm1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(@"hiba: " + ex.Message);
}
finally
{
con.Close();
}
}
-Zeratul-:
SqlCommand nem ismer olyan providert, hogy OoleDb, erre értettem. Az eleje varászslós és utána már nem OleDb-t használt a kolléga, itt csúszott el.
[ Szerkesztve ]
-Zeratul- es stevve koszonom mindkettotoknek, remelem igy mar mukodni fog.
szerk: mukodik : )
es bocs, hogy szetgyilkoltam a topikot
[ Szerkesztve ]
some men just wanna watch the world burn...
ok, akkor még az adapteres részt áruld el hogy kell, mert ebben a formában nekem nem ment
pár perc szenvedés után inkább írtam egy tök alap lekérdezést, hogy legalább lássam, hogy működik a dolog
Melyik részére gondolsz? A kolléga feljebb belinkelte a projektet, amiben már volt egy varázslós kapcsolat az mdb fájlhoz. Én már abból dolgoztam, de amúgy én se kínlódtam volna azzal. Jobb ezeket rögtön kódból lerendezni.
j0k3r!:
Nagyon szívesen, ezért van a topik.
[ Szerkesztve ]
erre:
adapter.Fill(ds);
dgvForm1.DataSource = ds.Tables[0];
vagy nem így kell, vagy valami hiányzik
De, ezt így kell. Feltöltöd a DataSet-et a query visszatérési értékével és a grid forrásának megadod a DataSet első táblájával. Ez absz. klasszikus megoldás.
persze lehet BindingSource-t is alkalmazni, de az ugyanez pepitában, mert akkor annak adod meg a DataSet-et.
[ Szerkesztve ]
Hello!
Kész, Silverlight alkalmazásból, vagy WPF, vagy C#-ból hogyan lehet exe-t csinálni?
Láttam a codeprojecten alkalmazásokat és a VS-ben szépen fut, de szeretném ha külön, ahogy némelyiknél van csak egy exe fájlból futna az egész. ez hogyan lehetséges?
hello!
lehet hulyeseget irok, es felreertettem a kerdesed, de a projectet tartalmazo mappaban van egy bin nevu mappa, azon belul debug, es ott van az exe-d, persze ehhez debugolni kell elotte.
some men just wanna watch the world burn...
A Silverlight alapvetően webes cucc, exe-t ne nagyon keress abból, WPF-ből már találsz futtathatót, a C# pedig programozási nyelv. Gyanítom Silverlight-ra gondoltál, ha nem találsz exe fájlt.
Minden kiderül, ha fordítasz egyet Visual Studioban.
[ Szerkesztve ]
Így gondoltam, ahogy az oldalon is van, Ott a project forrásfájlja, és ott van külön egy exe amihez nem kell debugolni stb, csak nyomatja a játékot
hello!
letoltod a zip-et, aztan kitomorited, aztan megnyitod a jigsaw.sln filet (vs-ban), aztan f5, aztan kilepsz a vs-bol, aztan a jigsaw.sln mellett lesz egy bin mappa, azonbelul Debug mappa, es ott lesz a jigsaw.exe.
vs2010-ban most teszteltem es mukodik.
mas:
a multkori adatbazisos feladathoz kapcsolodoan volna egy kerdesem:
hogy lehetne a Kategoria tablan belul a KategoriaNeve-ket egy comboboxban megjeleniteni ? (az osszeset)
elore is koszonom a segitseget.
[ Szerkesztve ]
some men just wanna watch the world burn...
Most nincs előttem VS, de a comboBox-nál is van DataSource. A grid mintájára készítesz egy lekérdezést, emiben csak a kategórianevek vannak és azt hozzáadod.
Kiválasztásnál meg a ComboBox SelectedIndexChanged eseményekor a comboBox.SelectedItem lesz a kiválasztott mező ebben az esetben.
[ Szerkesztve ]
koszonom.
kod:
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Configuration;
using vp.dsAdatokTableAdapters;
namespace vp
{
public partial class frmUj : Form
{
OleDbConnection con = new OleDbConnection();
public frmUj()
{
InitializeComponent();
con.ConnectionString = ConfigurationManager.ConnectionStrings["vp.Properties.Settings.adatokConnectionString"].ConnectionString;
OleDbDataAdapter adapter = new OleDbDataAdapter();
DataSet ds = new DataSet();
try
{
con.Open();
adapter.SelectCommand = new OleDbCommand("SELECT KategoriaNeve FROM Kategoriak", con);
adapter.Fill(ds);
cbKategoriak.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(@"hiba: " + ex.Message);
}
finally
{
con.Close();
}
}
}
}
ennek a hatasara a comboboxban lesz 5 db "System.Data.DataRowView".
az 5 az stimmel, csak a nevek nem : )
[ Szerkesztve ]
some men just wanna watch the world burn...
Ma írtunk progon, hát nem ment valami fényesen, sőt sehogy, de szerencsére nem írta be az egyest.
Egy ilyen progit kellett volna megcsinálni:
3 számot kellett bekérni (1-től 5-ig) egymástól vesszővel elválasztva és ezeknek az átlagát venni. Nekem ez nem ment, vagy legalábbis meg voltak adva milyen parancsokat használjunk fel hozzá: Substring, IndexOf
Tudna valaki segíteni nekem és elmagyarázni, hogy mit hogyan kell?
jah... bocs, kell a combobox.datamember, illetve a combobox.valuemember, amiknek az oszlop nevét kell adni így valahogy:
combobox.datamember = "kategoriak"
de ha nem kódból csinálod, akkor a combobox tulajdonságainál is tudsz datasource-t hozzárendelni. Eh, de kár, hogy nincs VS a környékemen most.
Illetve egy harmadik mód, ha úgyis csak ez az egy oszlop van benne, hogy a DS-ből a Rows-t veszed.
Vasinger!:
Este igen... később.
[ Szerkesztve ]
Ráérni ráér, akár egy hétig is.
És ha mondjuk Split-et használtál volna azt el sem fogadja?
Azt sajna nem is nagyon tudtam volna, de ha használom is akkor már csak 4-es.
Egyébként a tanár ezt a parancsot nem is ismeri, csak nézett volna
Egyébként próbálkoztam a Split-tel is, de nem nagyon értettem meg a használatát, vagy legalább is nem sikerült átvinnem erre a feladatra a megszerzett "tudást".
koszonom, igy mukodik:
cbKategoriak.DisplayMember = "KategoriaNeve";
cbKategoriak.ValueMember = "KaterogiaNeve";
cbKategoriak.DataSource = ds.Tables[0];
[ Szerkesztve ]
some men just wanna watch the world burn...
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!