Laden...
Avatar #avatar-3199.jpg
Benutzerbeschreibung

Forenbeiträge von Balaban_S Ingesamt 194 Beiträge

02.03.2011 - 05:11 Uhr

Hallo caoimhin

Ich habe keine Erfahrung mit dem Firebird .NET-Client. Ich denke aber die Herangehensweise sollte die Gleiche sein.

Ich schätze es handelt sich hierbei um ein typisiertes DataSet-Objekt erstellt mit dem VS Designer.

Der SqlClient bietet folgende Möglichkeit.
*Im Designer Rechtsklick auf TableAdapter *Konfigurieren auswählen *Im Dialog erweiterte Optionen anklicken *(sofern vorhanden) Ein Häkchen bei "Datentabelle aktualisieren" setzen.

am Besten schaust du als erstes ob der Firebird .NET-Client diese Möglichkeit auch bietet und ob dir auch die Korrekten Id-Nummern entsprechend deinem Generator liefert.

Wenn dies nicht der Fall sein sollte, kannst du das **Adapter.RowUpdated-Ereignis ** siehe Umgang mit 'DataAdapter'-Ereignissen (ADO.NET) abonnieren wenn der Firebird .NET-Client dies implementiert hat.

in code Sieht das dann etwa so aus:


...
 SchoolDataSetTableAdapters.DepartmentTableAdapter ta = new SchoolDataSetTableAdapters.DepartmentTableAdapter();

ta.Adapter.RowUpdated += new System.Data.SqlClient.SqlRowUpdatedEventHandler(Adapter_RowUpdated);    

void Adapter_RowUpdated(object sender, System.Data.SqlClient.SqlRowUpdatedEventArgs e)
        {
            string sql = "Deine Returning methode";
            using (var cmd = new SqlCommand(sql, e.Command.Connection, e.Command.Transaction))
            {
                e.Row["Id"] = /*(int)*/cmd.ExecuteScalar();
            }
        }

Ich möchte hierbei auf einen Artikel von Beth Massi verweisen, welches den Vorgang für Access-Datenbanken beschreibt(VB). Dabei geht es einfach um Relationen welche die korrekte Id erfordern, das spielt aber keine Rolle, da das gleiche Prinzip beschrieben wird.

Gruss

Balaban_s

11.01.2011 - 11:40 Uhr

Hallo maxpg

Ich hab(wirklic) bis jetzt noch nicht in SL programmiert, aber nach kurzem nachforschen habe ich herausgefunden, dass(was denn sonst) die ThreadPool-Klasse auch in Silverlight vorhanden ist.
Wenn du also gemäss Doku, für Threaderstellung, den Systemeigenen "Thread Pool"( -> ThreadPool-Klasse )benutzt, arbeiten diese Threads dann automatisch im Hintergrund.

..
Die Threads im verwalteten Threadpool sind Hintergrundthreads. Das heißt, ihre IsBackground-Eigenschaften sind true.
..

Gruss
Balaban_s

06.01.2011 - 13:46 Uhr

Hallo Kuehner

..
Ist das AND hier richtig oder muss da ein Komma hin?
...

Also gemäss Doku zu: DataTable.Compute-Methode sollte das so wie du es machst schon funktionieren.

Gruss

Balaban_s

22.12.2010 - 07:00 Uhr

Na guten Morgen,
War wohl ein Bisschen spät am Abend. Du meinst so etwas wie
crack.net

Gruss

22.12.2010 - 00:50 Uhr

Hallo med

Ich nehm immer das Hilfsfenster "Dokumentgliederung".
Befindet sich in der deutschen VS2010 unter:
Ansicht->Weitere Fenster->Dokumentgliederung

oder mit Tastenkürzel:

Ctrl+W,U

Gruss

Balaban_s

20.12.2010 - 18:22 Uhr

Hallo prakti08

Ich habe schon verstanden, was du möchtest, aber bezweifle, dass eine ComboBox die optimale Lösung ist. Ich würde dies mit einer Listbox versuchen.
Auf jeden Fall geht das mit DataColumn.Expression arbeiten.
Und zwar am besten, jedesmal wenn die Auswahl in den ListBoxen sich ändert aktualisierst du den Filter, der enstprechenden Bindingsource.

So mach ich es Zumindest.


ListBox1_SelectedIndexChanged(...)
{
  KategorienRow current = (KategorienRow) ((DataRowView)BindingSource1.Current).Row;
var sb = new StringBuilder();

int i =0;

 foreach(var row in current.GetKategorienRows())
{

 if(i==0)
{
sb.AppendFormat("'Kategorie'= {0}",row.ID);
}
else
{
sb.AppendFormat(" OR 'Kategorie'= {0}",row.ID); //EDIT: AND mit OR ersetzt
}
i++;
}

BindingSource3.Filter = sb.ToString();
}

Ist jetzt ungestestet und nicht gerade beste Schule aber so in etwa sollte es funktionieren.

Gruss

Balaban_s

18.12.2010 - 07:57 Uhr

Hallo bloody_fighter

Ich will jetzt nicht deinen Code refactoren(gut Deutsch) aber du solltest grundsätzlich properties(Eigenschaften) anstatt von Feldern verwenden.

Dann zu deiner Frage. Ausser dass man


public Feld KopieErstellen()
..
                    b.feld[i].Add(new int()); //Hier sowieso nicht ganz klar was das ergibt
                    b.feld[i][j] = feld[i][j];
...
        }

gleich in


public Feld KopieErstellen()
..
                    b.feld[i].Add(feld[i][j]);
...
        }

umändern könnte sehe ich keine weiteren nennenswerten Möglichkeiten mehr um noch was an Performance rauszuholen.

Es gäbe natürlich auch noch List(T).CopyTo-Methode (T[]) aber dies verläuft dann über den Umweg eines Puffer arrays und daher eigentlich mehr Rechenarbeit.

Gruss

Balaban_s

02.11.2010 - 16:05 Uhr

Hallo

Also wenn ich jetzt den oben erwähnten Befehl auf eine beliebige Tabelle aus einer DB, die ich nicht selber erstellt habe, ausführe erscheint bei mir so etwas:




USE [School]
GO

/****** Object:  Table [dbo].[Person]    Script Date: 11/02/2010 15:49:42 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Person](
------------------------------------------------------------------
	[PersonID] [int] IDENTITY(1,1) NOT NULL, //<- Hier
------------------------------------------------------------------
	[LastName] [nvarchar](50) NOT NULL,
	[FirstName] [nvarchar](50) NOT NULL,
	[HireDate] [datetime] NULL,
	[EnrollmentDate] [datetime] NULL,
 CONSTRAINT [PK_School.Student] PRIMARY KEY CLUSTERED 
(
	[PersonID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO


Im markierten Bereich ist ersichtlich dass die Spalte PersonID mit **IDENTITY **(Auto-Id) gekennzeichnet ist. Der Startwert ist als 1 und der Inkrement als 1 angegeben.

Sollte jetzt in deiner 'Rechnungsadresse'-Tabelle die Spalte 'KID' als IDENTITY definiert sein würde man das dementsprechend im Create-Script erkennen und gegebenenfalls auch korrigieren können. Darum denke ich, dass SSMS ein nützliches Werkzeug ist.

Gruss

Balaban_S

02.11.2010 - 08:43 Uhr

Hallo

Gemäss einigen Quellen soll dies hier funktionieren.



  PrintController standard = new StandardPrintController();
  printDocument1.PrintController = standard;
  printDocument1.Print();


gefunden: hier.

Ist mir persönlich bis jetzt jedoch noch nicht gelungen.

Gruss

Balaban_S

02.11.2010 - 01:50 Uhr

Hi

..oder gehts auch ohne?

Es geht schon ohne. Aber **mit **ist IMHO irgendwie praktischer.
Dann probier doch mal die variante über Visual Studio. Ich hoffe du hast Visual Studio.

Gemäss Bild.

Soweit ich weiss, haben die Express-Versionen keinen Server-Explorer. Man kann aber durchaus die Datenquellen anzeigen. Ich weiss nicht mehr genau wie (habe selber VS Pro) aber dass es geht weiss ich 100%-ig. Und wenn es doch nicht gehen sollte bleibt dir halt noch die Möglichkeit direkt via TSQL das Schema abzufragen
z.Bsp. so:


SELECT [CONSTRAINT_CATALOG]
      ,[CONSTRAINT_SCHEMA]
      ,[CONSTRAINT_NAME]
      ,[TABLE_CATALOG]
      ,[TABLE_SCHEMA]
      ,[TABLE_NAME]
      ,[COLUMN_NAME]
      ,[ORDINAL_POSITION]
  FROM [DeineDB].[INFORMATION_SCHEMA].[KEY_COLUMN_USAGE]

oder dann doch SSMSE. Deine Entscheidung.

Gruss

Balaban_S

01.11.2010 - 23:24 Uhr

Hi

Die Fehlermeldung

"Ein expliziter Wert für die Identitätsspalte kann nicht in der 'Rechnungsadresse'-Tabelle eingefügt werden, wenn IDENTITY_INSERT auf OFF festgelegt ist."

Kommt offensichtlich aus der Datenbank. Überprüf am besten die DB.

Also:

  1. (wenn vorhanden)Sql Server Management Studio öffnen
  2. Create Script für die Tabelle generieren (siehe Bild)
  3. Ausgabe hier posten.

Gruss

Balaban_S

18.10.2010 - 21:35 Uhr

Hallo

Also im Falle von List<T> sicher über den Index.

Gruss

Balaban_s

18.10.2010 - 20:36 Uhr

Hi shooter277

Der Link der michlG angibt, bezieht sich auf den grossen "echten" SqlServer.

SqlCe ist eine Embedded-Datenbank-> In-Process und In-Memory. Die Multiuser-Funktionalität sind in der jetztigen(3.5 Sp2) wie auch in der kommenden(4.0) Version sehr rudimentär.

Falls du diese Funktionalität brauchst solltest du auf die grössere Version umsteigen.

Gruss

Balaban_s

17.10.2010 - 15:27 Uhr

Hallo

Das Bild, ist von einem DataGrid noch aus Windows Forms 1. Das Das aktuelle DataGridView unterstütz dieses Feature nicht mehr.

Gruss

Balaban_s

17.10.2010 - 08:12 Uhr

Hallo Skato

Wofür array?

  
  string[] msgID = {msgID_substring};  
                        foreach (string s in msgID)  
                        ....  
  

und nicht gleich


switch(msgID_substring)
...

?

Edit: Ich hab jetzt nach dem Tip von MarsStein selbst noch ein bisschen rumprobiert und denke das kommt so ziemlich hin.


ushort ui;

            if (ushort.TryParse(BitConverter.ToString(buffer,4,7).Replace("-", "").Replace("0", ""), 
System.Globalization.NumberStyles.HexNumber|
System.Globalization.NumberStyles.AllowHexSpecifier, 
CultureInfo.CurrentCulture, out ui))
            {
                switch (ui)
                {
                    case 0xabba:
                        Console.WriteLine("Ball weg Telegram (Msg-ID:ABBA) erhalten");
                        break;
                    case 0xaabb:
                        Console.WriteLine("Ball horizontal Telegram (Msg-ID:AABB) erhalten");
                        break;
                    case 0xbbaa:
                        Console.WriteLine("Ball vertikal Telegram (Msg-ID:BBAA) erhalten");
                        break;
                    default:
                        Console.WriteLine("Unbekanntes Telegramm erhalten");
                        break;
                }
            }


Es ist jedoch zu überdenken ob man die 4 signifikanten "bytes" nicht schon serverseitig in 2 echte bytes zusammenpressen sollte.
Dann könnte man nämlich ganz einfach:





                switch (BitConverter.ToUInt16(buffer,4/*imaginär*/))
                {
                    case 0xabba:
                        Console.WriteLine("Ball weg Telegram (Msg-ID:ABBA) erhalten");
                        break;
                    case 0xaabb:
                        Console.WriteLine("Ball horizontal Telegram (Msg-ID:AABB) erhalten");
                        break;
                    case 0xbbaa:
                        Console.WriteLine("Ball vertikal Telegram (Msg-ID:BBAA) erhalten");
                        break;
                    default:
                        Console.WriteLine("Unbekanntes Telegramm erhalten");
                        break;
                }



Und das wäre dann wirklich eleganter.

Gruss
Balaban_s

12.10.2010 - 13:54 Uhr

Hallo

Auf die schnelle kommt mir da


sp_executesql 

in den Sinn.

Gruss

Balaban_s

12.10.2010 - 13:40 Uhr

Hallo

Bei mir gehts ohne Probleme. Hast due evtl. etwas an den Spracheinstellunegen von VS verändert?

Gruss

Balaban_s

11.10.2010 - 23:52 Uhr

Hallo

... aber bei meinem Programm kann ich diese nirgends hinzufügen...

Wie meinst du das. Ist es im Designer nicht verfügbar oder weisst du nicht wie man Parameter übergibt?

Gruss

Balaban_s

09.10.2010 - 03:07 Uhr

Guten Morgen Pria

Ich denke die Definition von AJAX
kennst du schon.

Ich weiss nicht genau was(bzw. in welchem Kontext) du mit "Dynamische Aktualisierung" meinst.

Man kann Ajax "von Hand" mit dem XMLHttpRequest-Objekt programmieren oder aber auch auf verschiedene Frameworks wie z.Bsp.*jquery *ASP.NET Ajax Control Toolkit *YUI *...

zurückgreifen, welche dann aber einiges mehr bieten als nur Ajax in simpelster Form bieten. Da kommen dann schon eigene Controls, Abfragesprachen, Layoutfuktionen bis hin zu Animationen.

Um zu deiner Frage mit der "Dynamischen Aktualisierung" zurückzukommen. Generell ist der Sinn von Ajax die Aktualisierung Clientseitig durchzuführen.
Wobei natürlich die Daten von einer externen Ressource(z.Bsp. Webdienst, Xml/Text-Datei, etc...) abgerufen werden ohne die Seite neu zu laden.

In ASP.Net(WebForms) gibt es sog. Server-Steuerelemente welche automatisch den Scriptcode im Client generieren.
Hierfür kann man kann man eigentlich nur noch auf die MSDN verweisen, was dann aber definitiv unter [URL = [Hinweis] Wie poste ich richtig? Punkt 1.1 fällt.

Als Einstieg eignet sich wahrscheinlich:Übersicht über das Teilrendering von Seiten.

Der Hauptaugenmerk sollte zusätzlich am Anfang mit Sicherheit bei:
ScriptManager-Klasse und UpdatePanel-Klasse liegen.

Gruss

Balaban_s

09.10.2010 - 00:07 Uhr

Hallo timmi

Bist du sich, dass das funktioniert?

Ich habe es ehrlich gesagt nicht getestet.

Wenn ich via DataSource/DataBind gehe gibt es diese Footer-Parameter doch gar
nicht und kann dementsprechend auch nicht abgefragt werden oder sehe ich das falsch?

Das weiss ich nicht.

Oder ist die letzte Zeile einer DataTable automatisch immer ein Footer?

Eine DataTable hat meines Wissens keinen footer du meinst wahrscheinlich das GridView->siehe nachbearbeiteten Code: ich habe

showfooter="true"

gesetzt, dann sollte es klappen.

Gruss

Balaban_s

08.10.2010 - 18:26 Uhr

Hallo zusammen

Ich finde
http://www.firestorm.ch

nicht schlecht.

Gruss
Balaban_s

07.10.2010 - 23:15 Uhr

Hallo

...DataSourceUpdateMode.OnPropertyChanged setzen.

Frage:Muss dafür die Datenquelle nicht "grundsätzlich" INotifyPropertyChanged Interface implementieren?

Gruss

Balaban_s

07.10.2010 - 22:00 Uhr

Hallo

Kuck' mal, was ein netter Mann mal programmiert hat.
DateTimePickerColumn im DataGridView
Gruss

Balaban_s

07.10.2010 - 16:41 Uhr

Hallo timmi

Ich hab da mal was für dich auf Basis von 2 Spalten.
Ich habe gesehen, dass su dein Problem gelöst hast, aber
jetzt habe ich es schon gecodet,also poste ich es auch. 🙂
Viielleicht hilft es ja jemand anderem.


<%@ Page language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

	DataTable dt = GetData();
	decimal Summe=0;
	DataTable GetData()
	{
		// Deine 2-Spalten-Tabelle
	}

  void gridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
  {

    if(e.Row.RowType == DataControlRowType.DataRow)
    {

	Summe+=(decimal)((DataRowView)e.Row.DataItem)["Wert"];
      /*edit*/
       return;
    }

    if(e.Row.RowType == DataControlRowType.Footer)
    {
	e.Row.Cells[0].Text = "<b>Summe:</b>";
		e.Row.Cells[1].Text = Summe.ToString();

    }

	

  }

void Page_Load(object sender, EventArgs e)
{
	        gridView1.DataSource = dt;
                gridView1.DataBind();
}


</script>

<html  >
  <head runat="server">
    <title>GridView RowDataBound Example</title>
</head>
<body>
    <form id="form1" runat="server">

      <h3>GridView RowDataBound Example</h3>

      <asp:gridview id="gridView1" 
        autogeneratecolumns="true"
        onrowdatabound="gridView1_RowDataBound" 
/*wichtig*/        showfooter="true"
        runat="server">
      </asp:gridview>

     </form>
  </body>
</html>

Gruss

Balaban_s

06.10.2010 - 10:24 Uhr

Hallo Khalid

Du hast Recht sorry.

Richtig wäre:


class Program
{
  static void Main(string[] args)
  {
    int? PID = null;

    Console.WriteLine(PID ?? (object)DBNull.Value);
  }
}


Mein Fehler.

Gruss

Balaban_s

06.10.2010 - 09:41 Uhr

Hallo zusammen

Die Signatur der Methode erwartet einen Typ von Object.


public OleDbParameter AddWithValue(
    string parameterName,
    Object value
)

somit ist es nicht von Belang, wenn ich den Ausdruck
EDIT: Falsch siehe weiter unten.


PID ?? DBNull.Value

übergebe, da der Typ Object, bekanntlich sehr flexibel und in jedem Fall NULLABLE ist.

Ich weiss nicht ob ich mich richtig ausdrücken konnte.

Gruss

Balaban_s

06.10.2010 - 00:05 Uhr

Hallo

Ist zwar ein Bisschen OT. Aber wenn schon verkürzte Schreibweise

  
...  
cmd.Parameters.AddWithValue("@pid", this.PID.HasValue ? this.PID.Value : DBNull.Value);  
..  
  

dann doch besser so


cmd.Parameters.AddWithValue("@pid", this.PID.Value ?? DBNull.Value);

Ich habe das auch gerade jetzt selbst herausgefunden.
Siehe: Operator ?? (C#-Referenz)

😉

Gruss
Balaban_s

05.10.2010 - 20:22 Uhr

Hi UNeverNo

Das System.Data.DataSet hat sowas wie eine diff funktion. Succh mal bei google nach XMLDiffgramm.

Entsprechende Methode wäre DataSet.GetChanges()

Bei MSDN gibt es Ausführlicheres dazu.

Gruss

Balaban_s

Edit: @gfoidl OK. 👍 Danke für die Korrektur des Links. Hatte ich nicht bemerkt.

04.10.2010 - 13:35 Uhr

Hallo assi

Geht es denn wirklich um das Event oder musst du nur die Methode
(dataGridViewX_Doubleclick(..)) aufrufen?

Ich denke in wirklich komplexeren Situationen ist es auch möglich ein Control von
System.Windows.Forms.DataGridView abzuleiten um dann die entsprechende Methode (z.Bsp: OnDoubleClick) zu überschreiben oder eben aufrufen.

?(Wie sollte denn der Wunsch-Code aussehen ?

Gruss

Balaban_S

04.10.2010 - 12:48 Uhr

Hi tux86

  dbMain.da = new OleDbDataAdapter(select, dbMain.conn);  

Gibt es einen bestimmten Grund den OleDbDataAdapter zu zu benutzen und nicht den SqlClient?

Sollte dies widererwarten eine .mdb(Jet/Access-Datenbank) ansprechen, könnte es sein, dass du an die Grenzen der Engine gelangt bist.

Auch bei SQL-Server würde ich zu einer bzw. mehreren View(s) raten um die SQL-Abfrage übersichtlicher zu halten.
**EDIT:**Wobei man Views natürlich auch bei Jet/Access einsetzen kann.

Gruss

Balaban_s

03.10.2010 - 11:22 Uhr

Hallo zusammen

Hi,

Ich wäre mir nämlich nicht ganz sicher, dass OLEDB noch die neuen Excel-Files im 12er Format unterstützt.

robbyrc hat ganz Recht.
Hier in diesem Artikel wird das ganz ausführlich beschrieben.

Gruss

Balaban_s

30.09.2010 - 19:31 Uhr

Hallo Tux86

Es geht ja nicht darum ob die Bezeichnungen aus der Abfrage eins zu eins mit den bezeichungen in der DataTable übereinstimmen , sondern auch ob im Report die Felder übereinstimmen.
Da würde ich die Berichtsdefinition noch ein Mal überprüfen.

Ansonsten ist der SQL-String den du postest nicht gültig oder nicht komplett.

Gruss

Balaban_s

26.09.2010 - 15:58 Uhr

Hallo

JimKnopf

Ich habe noch nie produktiv mit WPF gearbeitet, weiss aber dass dies ein Problem ist welches schon länger existiert.
Nach einer Google-Suche habe ich diesen älteren Artikel wiedergefunden.
Vielleicht hilft er dir ja.

Gruss

Balaban_s

24.09.2010 - 07:32 Uhr

Guten Morgen Doltsche

..
Eine eigene DataRow-Klasse zu schreiben ist leider nicht gerade einfach.
..


public class CustomRow: System.Data.DataRow
{
public myObject oParent{get;set;}
}

sollte eigentlich schon genügen.

Für Weiteres:
Einfache Vererbung

Und zusätzlich würde ich empfehlen:
[FAQ] Wie finde ich den Einstieg in C#?

Gruss

Balaban_s

23.09.2010 - 14:29 Uhr

8oach mein Fehler


strinng val =  myWorksheet.Cells[0,0].Value.ToString();

Gruss

Balaban_s

23.09.2010 - 14:09 Uhr

Hallo Astra

Ich glaub so:



int val =88;
myWorksheet.Cells[0,0].Value= val;

Gruss

Balaban_s

23.09.2010 - 11:05 Uhr

Hallo w1z4rd2003

Ich hoffe du meinst System.Windows.Forms.DataGridView

Von Haus aus bietet es diese Funktionalität meines Wissens nicht.

Das hier könnte helfen:
http://www.codeproject.com/KB/grid/DataGridView_manipulation.aspx

Oder einfach mal Google anwerfen.

Gruss

Balaban_S

23.09.2010 - 10:47 Uhr

Hallo Doltsche

Ich weiss nicht ob ich das richtig verstanden habe, aber du meinst so Etwas wie ein Master/-Detailbeziehung.

Du könntest eine neue Klasse von DataRow ableiten mit einer public property vom Typ
myObject. Wenn du die Referenz hast erübrigt sich der Index.

Gruss

Balaban_S

Edit: Rechtschreibfehler

21.09.2010 - 23:06 Uhr

Hallo

Der Threadersteller hat den Labels keine Namen zugewiesen.

Aber ich habe Ihm gezeigt wie nur mit dem Setzen einer Property auf das Control zugegriffen werden kann.

und zwar:


/*Hier*/ Label1.Name = Label1.Text = matrix[y, x];

Da es sich um ein 8x8 großes Feld handelt, kann es zu keiner Überschneidung kommen (erst wenn die Größe 2 stellig wird)

OK das stimmt.

Gruss

Balaban_s

21.09.2010 - 20:38 Uhr

Hallo zusammen

...Evtl. ist der Einsatz von DataSets eine ernstzunehmende Alternative.

Ja sogar via SOAP serialisierbar.
Wobei man beachten sollte, dass im Falle von einem SL-Client DataSets nicht unterstützt sein würden.

Gruss

Balaban_s

21.09.2010 - 20:32 Uhr

HAlo fz7090

das ist eine eher schlechte Lösung...

Ich finde die ganze Herangehensweise eigentlich eher "schlecht". Es ist einfach angefügt und nicht Neugecodet.

Was an sich stimmt ist jedoch, dass man mit Controls.Find() suchen muss
Das muss er auch da sich mit der Namensgebung wahrscheinlich so in der doppelten For-Schleife Überschneidungen ergeben werden., er könnte auch direkt via Controls[Controlname] zum gesuchten Ergebnis kommen.
Ich wollte eigentlich auch nur zeigen, dass diese Art der Beschriftung (bzw. Namensgebung) eher suboptimal ist und wollte es ihm nicht direkt vorkauen, da das Lernerlebnis ein Anderes ist wenn man selbst Fehler macht.

Gruss

Balaban_s

PS: Ich weiss ehrlich gesagt auch nicht, ob man 2 Controls überhaupt mit gleichen Namen versehen kann.

21.09.2010 - 19:24 Uhr

Hallo radeksm

Wenn du es im Browser anzeigen willst, würd ich ASP.NET/ASP.NET MVC empfehlen, denn mit (X)HTML/Javascript bist du jedenfalls auf einer grossen Spielwiese. Diese wird von allen Clients unterstützt.

Wenn du weisst, dass es nur Desktopclients sind, kannst du auch Silverlight nehmen.
Wobei es mittlerweile natürlich auch mobile OS'e gibt welche SL unterstützen, wie z.Bsp. Symbian, WP7.

Und wenn du ganz sicher bist, dass es nur Windows-Clients sind, kannst du auch XBAP-Anwendungen nehmen. Dann gibt es die Windows.Forms-Controls als Active-X steuerelemente zu registrieren usw.

Aber am "besten" ist wahrscheinlich schon Silverlight für das "tolle" RIA-Erlebnis.
Um jetzt nur bei den Möglichkeiten von C#& .Net zu bleiben.

Gruss

Balaban_s

21.09.2010 - 18:53 Uhr

Hallo Lesat

Einfach mal aus dem Stehgreif(ohne jegliche Garantie):



private void Form1_Load(object sender, EventArgs e)
{

String[,] matrix = new String[8, 8];
String stringx;
String stringy;
for (int y = 0; y < 8; ++y)
{
for (int x = 0; x < 8; ++x)
{
x++;
y++;
Label Label1 = new Label();
Label1.Location = new Point(x*60,y*60);
Label1.Size = new Size(60, 60);
stringx = x.ToString();
stringy = y.ToString();
x--;
y--;
matrix[y, x] = (stringx + stringy);

/*Hier*/ Label1.Name = Label1.Text = matrix[y, x];

if (x % 2 == 0 && y % 2 == 0)
{
Label1.BackColor = Color.Black;
Label1.ForeColor = Color.White;
}

if (x % 2 == 1 && y % 2 == 0)
{
Label1.BackColor = Color.White;
Label1.ForeColor = Color.Black;
}

if (x % 2 == 1 && y % 2 == 1)
{
Label1.BackColor = Color.Black;
Label1.ForeColor = Color.White;
}

if (x % 2 == 0 && y % 2 == 1)
{
Label1.BackColor = Color.White;
Label1.ForeColor = Color.Black;
}

this.Controls.Add(Label1);

}
}




}


void Suchen(string lName)
{
  foreach(Control c in this.Controls.Find(lName,false))
{
Label l = c as Label;
if(l!=null)
{
MessageBox.Show(l.Location.X.Tostring()+l.Location.Y.Tostring());
}
}
}

Gruss

Balaban_S

Edit: Code-Tags korrigiert

21.09.2010 - 18:26 Uhr

Hallo Dasart

Kannst du auch die Definition von Client posten?

Gruss
Balaban_S

18.09.2010 - 21:29 Uhr

Hallo zusammen

In diesem Sinne habe ich auch den Hinweis von Balaban_S verstanden

Nein eigentlich nicht.
Ich meinte viel mehr, da er mit Graphics-Objekten arbeitet sollte er mit OnPaint bzw. OnDraw arbeiten, denn es kann ja sein, dass da ungünstig disposed wird und damit eben eine Zugriffsverletzung entsteht. War eigentlich nur so geraten. Nichts für ungut.

So im Nachhinein denke ich auch, dass es wahrscheinlich an der internen Auflistung der Controls liegt. Den Sourcecode habe ich nicht angeschaut, wäre aber m.E. sicher einen Blick wert.

Gruss
Balaban_S

18.09.2010 - 12:49 Uhr

Hallo Doltsche

Gäbe es denn auch eine Möglichkeit ohne BindingSource? Diese möchte ich eigentlich eher vermeiden?

Ja klar sogar viel einfacher:


DataRow firstSelectedDataRow = (DataRow)dataGridView.SelectedRows[0].DataBoundItem;

Gruss

Balaban_S

18.09.2010 - 12:42 Uhr

Hallo t0mmi

Ich denke [Tutorial] Zeichnen in Windows-Programmen (Paint/OnPaint, PictureBox) sollte dir weiterhelfen.
Wenn nicht poste einfach nochmal.

Gruss

Balaban_S