Autor Beitrag
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 18.11.12 21:15 
ich möchte prüfen ob ein wert schon in einer dataTable vorhanden ist oder nicht.
falls der wert vorhanden ist möchte ich im Gridview die Selection auf den gefundenen eintrag setzen.

die tabelle durchsuche ich wie folgt:
ausblenden C#-Quelltext
1:
DataRow[] foundRow = dataTable_taglist.Select("[Tag-ID] = '" + textBox_tagid.Text + "'");					

leider kann ich mit foundRow nichts anfangen.
wo steht denn darin an welcher stelle der eintrag gefunden wurde?

hat dazu wer nen tip / eine lösung?

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: So 18.11.12 21:36 
Hi,

DataRow[] ist ein Array mit den gefunden DataRows. Durch diese kanst du iterieren.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
foreach (DataRow dr in foundRow)
{
   MessageBox.Show(dr[0].ToString());
    //oder
   MessageBox.Show(dr["CoulumnName"].ToString());
}


Oder aber:

ausblenden C#-Quelltext
1:
2:
3:
4:
if (foundRows.Length < 1)
    //Keine Datensätze gefunden......
else
    //dein Update Command........


Ich denke das sollte schon mal weiterhelfen, oder?

_________________
Gruß
Christoph
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: So 18.11.12 22:18 
Zitat:
alls der wert vorhanden ist möchte ich im Gridview die Selection auf den gefundenen eintrag setzen.


Die Selektion oder den Focus?

Zitat:
wo steht denn darin an welcher stelle der eintrag gefunden wurde?


Hä? An jeder Stelle. Die Ergebnismenge deines Selects sind alles Treffer.

Die Position in der DataTable hätte AFAIK hat auch nicht viel mit der Position im DataGridView zu tun.
Die Selektion, wenn es das ist was du meintest, könnte man auch direkt am Grid machen.

ausblenden C#-Quelltext
1:
2:
foreach (DataGridViewRow row in meinLiebesDataGridView.Rows)
    row.Selected = row.Cells["Tag-ID"].ToString() == textBox_tagid.Text;


Es wäre definitiv schöner das an der Datenmenge zu machen und nicht am Grid aber das Grid, eigentlich das ganze Winforms-Zeugs, stammt aber aus eine Prä-LINQ, Prä-Generics Zeit. Da gab es leider noch keine bessere ausdrucksstarke Methode das zu machen.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mo 19.11.12 00:01 
---edit---(beitrag umbeschrieben)---

sinn und zweck ...
ich bau mir hier eine anwendung für den RFID-Empfänger von Pollin.

problem: ich will prüfen ob ein rfid-tag schon bekannt ist oder nicht.
ich gehe davon aus das dataTable.Select() dafür das richtige mittel ist.

ich möchte die tabelle nach einem empfangenen tag durchsuchen (ob er schon in der tabelle ist),
wenner gefunden werden sollte möchte ich wissen in welcher zeile.
im gridview soll diese dann markiert werden um sie optisch hervor zu heben
und evtl. gleich löschen oder bearbeiten zu können.

bearbeiten eines eintrag mache ich aktuell so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
////////// einlesen aus dataset //////////
textBox1.Text = dataSet1.Tables["Table1"].Rows[dataGridView1.CurrentRow.Index]["Tag-ID"].ToString();
textBox2.Text = dataSet1.Tables["Table1"].Rows[dataGridView1.CurrentRow.Index]["Beschreibung"].ToString();
editrow = dataGridView1.CurrentRow.Index;

////////// schreiben in dataset //////////
dataSet1.Tables["Table1"].Rows[editrow]["Tag-ID"] = textBox1.Text;
dataSet1.Tables["Table1"].Rows[editrow]["Beschreibung"] = textBox2.Text;

es ist evtl. nicht schön aber es gibt keinen schnick schnack und klappt.
die variable "editrow" verwende ich um an die richtige position zurück zu speichern.

diese code teile auf select um zu biegen is ja auch kein ding.
hab ich ja im ersten beitrag schon gemacht.
nur bekomm ich daraus wohl nicht das was ich brauche, die zeilennummer in der datatable in der meine Tag-ID gefunden wurde.
die Tag-ID spalte ist bei mir primarykey wesswegen jede ID nur einmal vorhanden sein kann.

ps. wie Christoph1972 es vorschlägt bekomme ich nur das value zurück aber nicht die zeilennummer in der tabelle.
und wie Ralf Jansen es vorschlägt scheind es sinn zu machen aber wie biege ich das auf dein datatable um?

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Di 20.11.12 23:07 
hat also keiner ne idee die klappt?
begreif ich nicht, wurde doch sicher schon tausendfach gemacht.

im datagridview suchen will ich nicht und auch nix selbst stricken,
wenn es irgend ein board mittel gibt und sowas gibts mit sicherheit.

wenn nicht mit .select() dann mit was anderem.
.find hab ich auch schon versucht da kommt auch kein wert raus,
der angibt in welcher zeile der tabelle der gesuchte eintrag steht.

ich mach wohl besser ein neues thema auf ;) damit die fragestellung zum titel passt oder?

---------

p.s sagt mal, stell ich so bekloppte fragen bei denen mir keiner helfen kann/will
oder warum bekomm ich im durchschnitt nur auf jedes sechste thema das ich auf mache wirkliche hilfe.

ich zähl mich nach 10 Jahren hobby Programmierung noch immer zu den anfängern.
so knifflich können meine fragen jetzt wirklich nicht sein. ;)

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 21.11.12 01:02 
So wie ich deinen Beitrag vor deinem editieren in Erinnerung habe enthielt der nichts mehr was man noch als offene Frage hätte interpretieren können. Deine Frage war gelöst. Nur weil die Antwort nicht schön war (auch für den Beantwortenden) heißt ja nicht das es zwingend eine bessere gibt. Oder das sich alle anderen aufgefordert fühlen eine 'ich weiß es auch nicht besser'-Antwort zu geben damit du Bescheid weißt das es keine bessere gibt.

Und weil du den Beitrag einfach editiert hast hat natürlich auch keiner gemerkt das hier noch was offen ist. Beiträge umschreiben finde ich übrigens grundsätzlich daneben. Ich würde dir empfehlen das zu lassen bzw. benutze die Editfunktion nur für nicht Sinn verändernde Maßnahmen (Rechtschreibfehler etc.). Ich bin bestimmt nicht der einzige der da allergisch reagiert.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mi 21.11.12 21:13 
war mir nicht bewusst das leute darauf allergisch reagieren,
wenn man einen beitrag auf den nicht geantwortet wurde,
umschreibt um sein noch bestehendes problem besser zu verdeutlichen.

das editieren erscheind mir sinnvoller als sich selbst zu antworten,
welches genau so ungern gesehen wird.

gelöst war das problem bisher nicht weil die frage nicht beantwortet wurde.
Zitat:
"wo steht denn darin an welcher stelle der eintrag gefunden wurde?"

aber ich beantworte mir die frage mal wieder selbst und poste es auch für andere.

es gibt keine abfrage von datatable die eine zeilen nummer zurück gibt.
das muß über die übliche auto-increment spalte "id" gelöst werden
deren nummer kann man wie eine zeilen nummer verwenden.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mi 21.11.12 21:56 
Zitat:
es gibt keine abfrage von datatable die eine zeilen nummer zurück gibt.


DataTable.Rows.IndexOf(RowAusDerDataTable) liefert dir den Index in der DataTable. Aber wie bereits gesagt ist dieser Index nur mit minimaler Wahrscheinlichkeit der gleiche wie im Grid. Der hilft nicht.

Zitat:
das editieren erscheind mir sinnvoller als sich selbst zu antworten,
welches genau so ungern gesehen wird.


Ohne diesen ~Hilfruf~ merkt man aber nicht das sich der Beitrag geändert hat ;) Es ist ja gut wenn du versuchst das Problem nochmal anders darzustellen wenn du glaubst wie antworten nicht weil wir was nicht verstanden oder etwas missverstanden haben. Aber ich muss es halt auch irgendwie bemerken können. Solange das antworten auf sich selber kein simpler ~Push~ ist sondern eben eine weitergehende Erklärung finde ich das absolut korrekt.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Do 22.11.12 19:37 
und schon klappts.
ausblenden C#-Quelltext
1:
2:
3:
DataRow row = dataTable1.Rows.Find(gesuchteTagID);
int rowIndex = dataTable1.Rows.IndexOf(row);
MessageBox.Show("TagID in Zeile " + rowIndex + " gefunden.");

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke