Laden...

Forenbeiträge von falangkinjau Ingesamt 171 Beiträge

16.02.2007 - 10:34 Uhr

Hallo bhelbig,



 for (Int32 intI = 0; intI < dvView.Table.Columns.Count; intI++)
                { dgvPreview.Columns.Add("Column" + intI.ToString(), "Column" + intI.ToString()); }

dgvPreview.DataSource = dvView;


Gruß falangkinjau

16.02.2007 - 10:20 Uhr

Hallo barzelona,

geht es damit?


form.Visible = true;

Gruß falangkinjau

15.02.2007 - 13:54 Uhr

Hallo Bonvie,

in etwa so:



if ( (e.RowIndex%2) == 0)  
{             
       grid.Rows[e.RowIndex].DefaultCellStyle = (isDataDirty) ? CellStyleNOTOK : CellStyleOKWithColor1;
}
else
{
        grid.Rows[e.RowIndex].DefaultCellStyle = (isDataDirty) ? CellStyleNOTOK :CellStyleOKWithColor2; 
}

Gruß falangkinjau

15.02.2007 - 12:55 Uhr

Hallo Bonvie,

sollte ich dich richtig verstanden haben, dann möchtest du je nach Bearbeitungstand einer Celle einer bestimmten Spalte die Farbe der Zeile ändern.
Füge in deinen Händler entsprechende Bedingung ein.

in etwa so:


void grid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
 {
            DataGridView grid = sender as DataGridView;
            if (grid == null) return;
                            
            grid.Rows[e.RowIndex].DefaultCellStyle = (isDataDirty) ? CellStyleNOTOK : CellStyleOK; 
            
}

isDataDirty setzt du an entsprechender Stelle.

Den RowCellStyle setzen ist vielleicht im RowValidatingereignis besser aufgehoben.

Gruß falangkinjau

14.02.2007 - 11:23 Uhr

Hallo Kati82,

wenn es nicht geht, garnicht.

Nachdem dem du alles schön erklärt hast, demonstrierst du das mit deinem richtigen PDA. Das ist dann das Highlight. Drückst den Profs den PDA in die Hand und sagst: "Wollen sie auch mal?".

Gruß falangkinjau

14.02.2007 - 10:48 Uhr

Hallo LastGentlement,

Wie sieht deine Struktur aus?

Unabhängig davon würde ich es so aufbauen:

Tabelle
Spalte id, Spalte parentid, name, wohnort, etc.
1, NULL, etc;
2, NULL, etc;
3, 2, etc;
4, 2, etc;

bedeutet, dass die erste Adresse ist z.B.: die Meldeadresse. Die zweite ebenfalls.
Die 3. und 4. ist eine Unteradresse von 2 z.B.: Lieferadresse oder Rechnungsanschrift. Das könnte noch ausgebaut werden wie z.B.: Art der Adresse.

Na, dann ist es eigendlich doch einfach. ODER?

Gruß falangkinjau

14.02.2007 - 10:37 Uhr

Hallo Kukulkan,

natürlich kannst du eine Anwendung ohne VS2005 für CF2.0 entwickeln. Local debuggen(auf dem Desktop) natürlich auch, solange wie du keine spezifischen PDA-Geschichten debuggen mußt.
Wann kommt das wirklich vor??? Das habe ich noch NIE gemacht. 😁

Svenson hat eigendlich alles schon beschrieben. Wenn es komfortabel sein soll, dann muß Geld ausgegeben werden.

SharpDevelop bringt eine Projektvorlage für CF2.0 mit.

Es muß natürlich darauf geachtet werden, daß keine Komponenten,Typen, Eigenschaften etc. verwendet werden die es im CF2.0 nicht gibt.

Mit dem kostenlosen Emulator von Microsoft kann dann auch die Anwendung local getestet werden. Mit einem PostBuildscript kann man sich hier das Leben auch einfacher gestalten.

Einfach mal ausprobieren.

Gruß falangkinau

14.02.2007 - 10:20 Uhr

Hallo Kati82,

schau mal hier.

Na dann gute Verteidigung.

Gruß falangkinjau

13.02.2007 - 11:43 Uhr

Hallo Deletemaster,

guten Morgen und der Zugriff scheint ja jetzt zu funktionieren. 😁

Jetzt liest du dir noch das durch und dann geht das auch mit den Parametern.

Achso, es gibt auch eine nette Hilfedatei die mit dem Connector installiert wurden ist. Da gibt es eigendlich zu jeder Klasse ein Beispiel.

Gruß falangkinjau

13.02.2007 - 00:11 Uhr

Hallo Deletemaster,

ha, ich rede hier von VS2005.

du arbeitest also mit Net 1.0 oder Net 1.1? Richtig.

Dann mußt du natürlich die 1.1 Version von MySql.Data.dll nehmen und nicht die 2.0.

Wie die in VS 2003 eingebunden wird kann ich dir allerdings nicht sagen, da ich VS2003 nicht kenne.

Gruß falangkinjau

12.02.2007 - 23:49 Uhr

Hallo Deletemaster,

ja da bin ich auch erstmal sprachlos.

Das muß so gehen, wenn die MySql.Data.dll korrekt ist. Mache ich ja auch so und es funzt.

Sag mal, bindest du die richtige MySql.Data.dll Version für 2.0 ein?

Gruß falangkinjau

12.02.2007 - 23:18 Uhr

Hallo Deletemaster,

was hast du dir angeschaut GAC oder erstmal ganz einfach über Verweise hinzufügen, in deinem Projekt, REITER oder TAB Durchsuchen?

RegEdit ist mit Sicherheit falsch.

Gruß falangkinjau

12.02.2007 - 23:08 Uhr

Hallo Deletmaster,

ich habe übersehen das du ja weißt wo die *.dll ist.

Also über DURCHSUCHEN einbinden.

Gruß falangkinjau

12.02.2007 - 23:06 Uhr

Hallo Deletemaster,

du brauchst nichts im GAC zu installieren.

Im Projekt gehst du auf Verweise. Rechte Maustaste und bei Durchsuchen... selektierst du die MySql.Data.dll. Die befindet sich natürlich dort wo du den Connector installiert hast. Wenn du es nicht mehr weißt, dann suche danach.

Noch "using MySql.Data.MySqlClient;" in dein *.cs einbinden und los geht es.

Wenn du später das Prog weggeben möchtest, dann solltest du bei den Eigenschaften noch lokal Kopie auf true setzen. Dann wird die dll mit in das Ausgabeverzeichnis geschoben.

Gruß falangkinjau

12.02.2007 - 14:30 Uhr

Hallo blacky,

unklar ist mir noch wie du die Daten holst und mit was für ein SQLServer gearbeitet wird, aber das soll erstmal egal sein.

Also ganz pragmatisch, da ich mit den SqlXml Type auch noch nichts gemacht habe:
Wieso holst du Dir die Werte (XSD-Daten) aus Spalte1 nicht genauso wie die Werte (XML-Daten) aus Spalte 2? XSD ist doch auch nur XML.
Hast du das schon probiert? Wenn ja, was funzt nicht?

Wenn das garnicht geht und ein anderer keine Lösung hat,
dann würde ich noch den folgenden Ansatz verfolgen: Hole die Xml-Daten gleich in ein DataSet. Ist das vielleicht schon der Fall?
Dort befinden sich, dann je nach Struktur bzw. Aufbau der Xml-Daten, 1..n Tabellen.
Das einzige was du hier Wissen mußt, welche Daten für den User wichtig sind. Jetzt brauchst du "nur" noch durch die Tabelle/Colum/Row gehen und entsprechende Informationen für den User filtern. Hast du diese, dann kannst du entsprechend darauf reagieren.

Code und Fehlermeldungen zu posten sind auch ganz praktisch, dann sehen die anderen gleich, ob es so geht oder nicht bzw. finden Dreher.

Gruß falangkinjau

12.02.2007 - 12:38 Uhr

Hallo blacky,
ein blutiger C#Anfänger hilft gerne einen andere blutigen C#Anfänger, aber so richtig verstanden habe ich dein Anliegen noch nicht.

Du redest einmal von einer XML-Datei, die Du schon eingelesen hast. Dann wieder von XML Daten in einer SQL Datenbank. ?(
Dann hast du das passende XML Schema schon und möchtest dieses auslesen.

Was genau fehlt nun und was hast du nun?

Gruß falangkinjau

11.02.2007 - 22:37 Uhr

Hallo #Ulf,

hier noch ein möglicher Ansatz, der auch das Standardverhalten wie das Ausblenden des z.B.: DeleteButtons bei 0 Items in der Liste berücksichtigt.

Beispiel:


using System;
using System.Drawing;
using System.Windows.Forms;

namespace TestDataGridViewEx
{

    /// <summary>
    /// Klasse leitet BindingNavigator ab.
    /// Standartbutton Delete wird ausgeblendet.
    /// Ein neu erstellter Button übernimmt diese Funktion scheinbar für den User.
    /// Innerhalb des ClickEvent wird dann entschieden, ob gelöscht werden soll.
    /// </summary>
    internal class BindingNavigatorExt:BindingNavigator
    {
        
        //Neuer DeleteButton
        private ToolStripButton _tsbDelete;
        
        public BindingNavigatorExt(BindingSource bs)
            :base(bs)
        {
            
            //Standard DeleteButton ausblenden
            base.DeleteItem.Visible = false;
            
            //Neuer DeleteButton
            _tsbDelete = new ToolStripButton();
            _tsbDelete.Name = "_tsbDelete";
            _tsbDelete.Image = (Image)Properties.Resources.delete;//Achtung: korrekte Resource einsetzen
            _tsbDelete.ToolTipText = "Datensatz löschen?";
            this.Items.Add(_tsbDelete);

            _tsbDelete.Click += new EventHandler(_tsbDelete_Click);


            //Folgende Events abbonnieren um das Orginalverhalten vom DeleteButton zu simulieren.
            //Wenn keine Elemente vorhanden sind dann wird dieser deaktiviert
            bs.DataSourceChanged += new EventHandler(bs_DataSourceChanged);
            bs.ListChanged += new System.ComponentModel.ListChangedEventHandler(bs_ListChanged);

        }

        private void _tsbDelete_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Wirklich löschen?", "Achtung", MessageBoxButtons.YesNo,MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                this.BindingSource.RemoveCurrent();
            }
        }

        private void bs_ListChanged(object sender, System.ComponentModel.ListChangedEventArgs e)
        {
            BindingSource bs = sender as BindingSource;
            if (bs == null) return;

            VisibleStandardButton((bs.List.Count != 0));
        }

        private void bs_DataSourceChanged(object sender, EventArgs e)
        {
            BindingSource bs = sender as BindingSource;
            if (bs == null) return;

            VisibleStandardButton((bs.List.Count != 0));
        }

        private void VisibleStandardButton(Boolean value)
        {
            _tsbDelete.Enabled = value;
        }
    }
}



Gruß falangkinjau

31.01.2007 - 11:27 Uhr

Hallo,

könnte auch noch was sein Pdf-Analyzer und die Preise sind auch ganz in Ordnung für mein Empfinden.

Gruß falangkinjau

26.01.2007 - 13:25 Uhr

Hallo Fabian,

danke, der ist sogar sehr interessant.

Der Beitrag bzw. das Beispiel sollte eigendlich zu ca. 60%-70% alle hier gestellten Fragen zu DataGrid beantworten.

Gruß falangkinjau

23.01.2007 - 16:46 Uhr

Hallo juetho,

ToolStripItem.Enabled = false setzen sollte eigendlich zum gewünschten Ziel führen.

Gruß falangkinjau

23.01.2007 - 12:28 Uhr

Hallo Eisbaer_82,

na dann Enschuldigung.

Gruß falangkinjau

23.01.2007 - 12:06 Uhr

Hallo Eisbaer_82,

aus der MySqlhilfe:

One restriction is that a subquery's outer statement must be one of: SELECT, INSERT, UPDATE, DELETE, SET, or DO. Another restriction is that currently you cannot modify a table and select from the same table in a subquery. This applies to statements such as DELETE, INSERT, REPLACE, UPDATE, and (because subqueries can be used in the SET clause) LOAD DATA INFILE.

Das sollte deine Frage beantworten. Es geht so nicht.

Gruß falangkinjau

18.01.2007 - 12:12 Uhr

Hallo Mahul,

eine andere Möglichkeit ist noch die über XML/XSLT -> SpreadsheetML.
Der Link könnte dabei auch noch helfen.

Ich erstelle auch so Excelreports. Das gute dabei ist, dass ich für Änderungen nur noch das Stylesheet anpassen muss.

Gruß falangkinjau

17.01.2007 - 21:10 Uhr

Hallo dr4g0n76 ,

habe es gerade mal ausprobiert und hatte zuerst auch den Fehler.
Habe mir dann noch die Dokumentation besorgt und dort den entscheidenden Hinweis erhalten.

Im XmL-File des AddIns mußt du noch den Path anpassen, wo das AddIn bei DIR liegt.

Dann sollte es auch bei dir funktionieren. 😉

Gruß falangkinjau

17.01.2007 - 19:42 Uhr

Hallo der-basti,


dataGridView.Columns.Add(comboBoxColumn);

und die letzte Zeile raus.

Gruß falangkinjau

17.01.2007 - 15:45 Uhr

Hallo Ferjama,

dann gestalte das einfacher und versuche nicht alles mit einer Regexp zu erschlagen.

  1. Splitten, das Semikolon ist dein Splitkriterium.
  2. Entferne an Position 1 und n-1 die Anführungszeichen.
  3. Dann geht es weiter wie du möchtest.

Gruß falangkinjau

17.01.2007 - 15:16 Uhr

Hallo Ferjama,

gleich Aussehen ist stark übertrieben. 😁

Nur so auf dem ersten Blick fällt mir beim ersten Satz folgendes auf:

length QRC / R3/8" connection 1/pkVE: 1

Was ist das für ein Anführungszeichen?

Gruß falangkinjau

15.01.2007 - 08:39 Uhr

Hallo Qt21580,

kommst du grundsätzlich nicht drauf? Was ist die Fehlermeldung???

Probier es mal über die Console oder über den Querybrowser. Ich denke mal du(Dein Rechner) hat einfach kein Recht, auch wenn du als User das Recht hast.

Gruß falangkinjau

13.01.2007 - 09:24 Uhr

Hallo Borg,
ist schon klar. Wollte nur am Eingangsbeispiel zeigen wie sich so Code reduzieren kann, wenn die nun bekannte Funktion eingesetzt wird.

Werde es aber vor Application.Run() benötigen.

Schönes Wochenende falangkinjau

13.01.2007 - 00:53 Uhr

Hallo VizOne,

genau das war es. 👍

Jetzt gefällt mir das schon viel besser.


Application.Run(new MainForm(Screen.PrimaryScreen.Bounds.Height));

Danke schön und Gruß falangkinjau

12.01.2007 - 22:37 Uhr

Hallo,

ich möchte VOR Applikation.Run(...) feststellen ob 320x240, 240x240 etc. und dann entsprechenden Parameter übergeben.

Hier ist meine schmutzige Lösung:


[MTAThread]
        static void Main()
        {

            Form f = new Form();
            f.WindowState = FormWindowState.Maximized;
            f.Visible = false;
            Int32 cy = f.Height;
            f.Dispose();
                        
            Application.Run(new MainForm(cy));
        }

Meine Frage:
Gibt es eine Funktion/Klasse im CF2.0 mit der die physikalische Displaygröße ermittelt werden kann analog der WIN API-Funktion GetSystemMetrics(SM_CYSCREEN)?

Vielleicht gibt es auch ein Property analog FormScale von Form, welches aber nur im Designmodus angeszeigt wird und zur Laufzeit nicht zur Verfügung steht.

Gruß falangkinjau

12.01.2007 - 15:52 Uhr

Hallo Zottel,
das wäre eine Lösung.


using System;
using System.Windows.Forms;
using System.Data;

class MainForm:Form
{
    public MainForm()
    {
        this.Text = "DataGridViewCellButtonExample";
        this.WindowState = FormWindowState.Maximized;

        //Das DataGridView mit Button in den Zellen der zweiten Spalte
        DataGridView dgv = new DataGridView();
        dgv.Name = "dataGridView";
        dgv.Dock = DockStyle.Fill;
        dgv.AutoGenerateColumns = false;
        dgv.ReadOnly = true;

        DataGridViewTextBoxColumn dgvtbc = new DataGridViewTextBoxColumn();
        dgvtbc.DataPropertyName = "Spalte 1";
        dgv.Columns.Add(dgvtbc);

        DataGridViewButtonColumn dgvbc = new DataGridViewButtonColumn();
        dgvbc.DataPropertyName = "Spalte 2";
        dgv.Columns.Add(dgvbc);
        
        //Eine kleine Tabelle für Werte die dann im DataGridView dargestellt werden.
        DataTable dt = new DataTable();
        DataColumn dc1 = new DataColumn("Spalte 1");
        dc1.DataType = typeof(Int32);
        dt.Columns.Add(dc1);
        DataColumn dc2 = new DataColumn("Spalte 2");
        dc2.DataType = typeof(String);
        dt.Columns.Add(dc2);

        DataRow dr = null;
        for (Int32 i = 0; i < 1000; i++)
        {
            dr = dt.NewRow();
            dr[0] = i;
            dr[1] = "Zeile: " + i.ToString();
            dt.Rows.Add(dr);
        }
        
        BindingSource bs = new BindingSource(dt, null);
        dgv.DataSource = bs.DataSource;
        dgv.Parent = this;


        dgv.CellContentClick += new DataGridViewCellEventHandler(dgv_CellContentClick);
    }
    
    void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        //Die Buttons befinden sich im Beispiel in Spalte 1
        if (e.ColumnIndex == 1)
        {
            MessageBox.Show(String.Format("Button in Zeile: {0} geklickt!", e.RowIndex.ToString()), "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

abstract class App
{
    public static void Main()
    {
        Application.Run(new MainForm());
    }
}

Gruß falangkinjau

12.01.2007 - 15:01 Uhr

Hallo ihr beiden,

hier ein Beispiel zum ändern der Buttonbeschriftung.
Wenn Beispielanwendung gestartet ist, einfach in entsprechende Zeile im DataGridView gehen und Button in ToolBar klicken, um die Beschriftung zu ändern.


using System;
using System.Windows.Forms;
using System.Data;

class MainForm:Form
{
    public MainForm()
    {
        this.Text = "DataGridViewCellButtonExample";
        this.WindowState = FormWindowState.Maximized;

        //Ein ToolStrip und ToolStripButton für die Aktion zum Ändern der Buttonbeschriftung
        ToolStrip ts = new ToolStrip();
        ts.Dock = DockStyle.Top;
        ToolStripButton tsb = new ToolStripButton("Buttonbeschriftung in DataGridView ändern");
        tsb.Click += new EventHandler(tsb_Click);
        ts.Items.Add(tsb);
        ts.Parent = this;

        //Das DataGridView mit Button in den Zellen der zweiten Spalte
        DataGridView dgv = new DataGridView();
        dgv.Name = "dataGridView";
        dgv.Dock = DockStyle.Fill;
        dgv.AutoGenerateColumns = false;
        dgv.ReadOnly = true;

        DataGridViewTextBoxColumn dgvtbc = new DataGridViewTextBoxColumn();
        dgvtbc.DataPropertyName = "Spalte 1";
        dgv.Columns.Add(dgvtbc);

        DataGridViewButtonColumn dgvbc = new DataGridViewButtonColumn();
        dgvbc.DataPropertyName = "Spalte 2";
        dgv.Columns.Add(dgvbc);
        
        //Eine kleine Tabelle für Werte die dann im DataGridView dargestellt werden.
        DataTable dt = new DataTable();
        DataColumn dc1 = new DataColumn("Spalte 1");
        dc1.DataType = typeof(Int32);
        dt.Columns.Add(dc1);
        DataColumn dc2 = new DataColumn("Spalte 2");
        dc2.DataType = typeof(String);
        dt.Columns.Add(dc2);

        DataRow dr = null;
        for ( Int32 i = 0;  i < 1000;  i++ )
        {
            dr = dt.NewRow();
            dr[0] = i;
            dr[1] = "Zeile: " + i.ToString();
            dt.Rows.Add(dr);
        }
        
        BindingSource bs = new BindingSource(dt, null);
        dgv.DataSource = bs.DataSource;
        dgv.Parent = this;

    }
        
    void tsb_Click(object sender, EventArgs e)
    {
        //Als erstes DataGridView besorgen
        DataGridView dgv = this.Controls["dataGridView"] as DataGridView;
        if ( dgv == null ) return;
        
        //Als zweites die DataSource
        DataTable dt = dgv.DataSource as DataTable;
        if ( dt == null ) return;

        //Jetzt ändern wir die Werte in der DataSource(DataTable) UND IM DATAGRIDVIEW UND DAMIT AUCH DIE BUTTONBESCHRIFTUNG
        dt.Rows[dgv.CurrentCell.RowIndex][0] = 100;
        dt.Rows[dgv.CurrentCell.RowIndex][1] = DateTime.Now.ToLongTimeString();
   }
}

abstract class App
{
    public static void Main()
    {
        Application.Run(new MainForm());
    }
}

Gruß falangkinjau

11.01.2007 - 14:18 Uhr

Hallo LastGentleman,

wenn ich mich recht erinnere war hier so ein Beispiel dabei.

Gruß falangkinjau

10.01.2007 - 19:19 Uhr

Hallo SharpProgs,

bei oben genannten Link als Keyword noch "Weifen Luo" eingeben und du hast exakt das was du brauchst.

Gruß falangkinjau

08.01.2007 - 20:29 Uhr

Hallo klofisch,

da hast du bestimmt einen Dreher in deinem Code.

Du brauchst dein DataSet nur zu speichern und im XML-File sollten alle Daten stehen. Natürlich auch die, die der User geändert und mit einem Enter bestätigt hat.

Dein Beispiel hat bei mir hier so funktioniert.


KennzahlenDaten.WriteXml( @"PathUndDatei");

Gruß falangkinjau

08.01.2007 - 14:31 Uhr

Hallo klofisch,

ich kann nur vermuten was du meinst.

Wo und auf was genau wendest du WriteXML an? Soll die Struktur des XML-File genau so aussehen wie am Anfang, also mit Umweltkennzahlentag?
Codeschnipsel!

Gruß falangkinjau

08.01.2007 - 14:24 Uhr

Hallo ogre,

versuche es mal mit table.Copy() ob es klappt.

in etwas so:



DataTable dt = null;
for(Int32 i=0; i<dsFrom.Tables.Count;i++)
{
      dt = new DataTable();
      dt = dsFrom.Tables[i].Copy();
      dsTo.Tables.Add(dt);
}

Gruß falangkinjau

06.01.2007 - 18:00 Uhr

Hallo Simon,

nur noch


public event EventHandler OwnerChanged;

hinzufügen und es funktioniert tatellos.

Danke und Gruß falangkinjau

04.01.2007 - 13:10 Uhr

Hallo Simon,

zum Wunsch mehr nachdem ich meine ersten Eindrücke beim Spielen mit der Beispielapplikation geschildert habe.

Ich habe deine Beispielapplikation um Toolstripitems erweitert, sowohl für die Workbench(Beenden) als auch für das TestAddin(Click me).
Das hat auch wunderbar funktioniert. Wie es geht findet man ja z.B. im Sample ICSharpCode.Core.Demo.

Was mich nun irritiert ist das ich beim TestAddIn die Resourcen nicht referenzieren kann, wenn diese im TestAddinprojekt erstellt werden.

Beispiel:

So geht es, wenn ich die Einträge der Resourcen in der globalen StringResources.resources bzw. Image... also unter Applikation/Startup ablege bzw. eintrage.

aus TestAddIn.addin


<Path name="/Workbench/MainMenu/File">
	<MenuItem id="TestMenuItem" class="TestAddIn.TestItem" label="${res:TestAddIn.Menu.File.ClickMe}" insertbefore="Quit" />
</Path>
	
<Path name="/Workbench/Toolbar">
	<ToolbarItem id="TestMenuItem" tooltip="${res:TestAddIn.Tooltip.File.ClickMe}"  icon="DocumentHS" class="TestAddIn.TestItem" insertafter="Quit" />
</Path>

Erstelle ich die Resourcen aber im TestAddInprojekt, dann werden diese nicht referenziert. Als Label wird dann "${res:TestAddIn.Menu.File.ClickMe}" angezeigt.
Hier muß ich wohl noch was falsch machen bwz. ich habe es noch nicht verstanden wo für was welche Resourcen abgelegt werden.

Nun zu mein Wunsch und Vorschlag für Artikel 3:

Konfiguration eines AddIn. Neuer Menüeintrag erstellen "Option..." Es geht der Konfigurationsdialog auf wie bei SharpDeveloper. Dort gibt es natürlich nur den Eintrag TestAddIn. Was wollen wir konfigurieren: z.B. Messagestring der Messagebox welche bei ClickMe angezeigt wird.

Ich denke das ist sehr heftig, würde aber gut die Interaktion demonstrieren. Darüber würde auch gezeigt werden wie ein AddIn konfiguriert wird.

Vielleicht hast du ja auch eine andere und bessere Idee.

Gruß falangkinjau

04.01.2007 - 13:01 Uhr

Hallo Newton,

ich sehe kein Exceptionhandling.

Versuch mal ob du die Exception fangen kannst:


int numRows;
try
{
   numRows = productsTableAdapter11.Update(changes); 
}
catch(Exception ex)
{
   ...do_something...
}

Gruß falangkinjau

03.01.2007 - 15:32 Uhr

Hallo kati82,

schade , war nur ein Verdacht.

Gruß falangkinjau

03.01.2007 - 14:32 Uhr

Hallo kati82,

Frage: Hast du ein EventHandler-SelectedIndexChanged für die ComboBox im Designer erstellt und wird in der Funktion Code ausgeführt der eine Weile dauert?

Gruß falangkinjau

03.01.2007 - 11:57 Uhr

Hallo Diggi,

wo hast du die DataGridView.Rows.Add Funktion mit 2-Parameter her und was machst du da mit Column.Insert(...)?

So hast du unterschiedliche Bilder in jeder Zeile:



public Form1()
        {
            InitializeComponent();

            DataGridView dgv = new DataGridView();
            dgv.Dock = DockStyle.Fill;
            dgv.AllowUserToAddRows = false;

            DataGridViewImageColumn dgvic = new DataGridViewImageColumn(false);
            
            dgvic.ImageLayout = DataGridViewImageCellLayout.Normal;
            
            dgv.Columns.Add(dgvic);
            
            dgv.Rows.Add(2);

            dgv[0, 0].Value = (Image)Properties.Resources.AlignTableCellMiddleCenterHS;
            dgv[0, 1].Value = (Image)Properties.Resources.AlignTableCellMiddleLeftJustHS;
            
            dgv.Parent = this;

        }


Gruß falangkinjau

03.01.2007 - 01:27 Uhr

Hallo Simon,

wo ist die Fortsetzung? 😁

Habe mich vor ca. 3Monaten mal durch das englische Material der Autoren von SharpDeveloper gewühlt und nicht durchgeblickt.
War definitiv zu viel für den Anfang.

Dank deiner kleinen Einführung ist mir jetzt einiges klarer geworden und hoffe doch das es bald weitergeht. 👍

Gruß falangkinjau

02.01.2007 - 23:35 Uhr

Hallo,

so:


this.tab_daten.CaptionText = String.Format("Kostentstelle: {0}", (KennzahlenDaten.Tables["CostCenter"]).Rows[0][1].ToString());

Aber Achtung, das ist nur die Richtung. Sobald dein XML weitere CostCenter hat, dann mußt du dir das dynamisch gestalten. Dann hast du bzw. der Anwender die Wahl.


...(KennzahlenDaten.Tables["CostCenter"]).Rows[?][1].ToString()

Gruß falangkinjau

02.01.2007 - 16:10 Uhr

Hallo,

ich mache es ohne Designer. Per Code die Columns erstellen, Spalten mappen usw.. Ob es noch einen anderen Weg gibt weiss ich nicht.

Hier ein Pseudobeispiel für das was ich oben meinte:



dataGridView.AutoGenerateColumns = false;
DataGridViewTextBoxColumn dgvtbc = new DataGridViewTextBoxColumn();

//jetzt mit was gemappt werden soll
dgvtbc.DataPropertyName = "Dein_Spaltenname_aus_der_Datasource";

dgvtbc.HeaderText = "Deine_Spalten_beschriftung";
dataGridView.Columns.Add(dgvtbc);
u.s.w.


In der rauhen Wirklichkeit habe ich immer ein BasisDataGridView welches vom DataGridView abgeleitet ist. Stellt mir die Grundfunktionalität wie Aussehen etc. zur Verfügung so wie ich es brauche. Vom BasisDataGridView leitet ich dann immer die eigendlichen Views für für die Anwender ab. Im Konstruktor werden dann die Spalten erstellt.

Gruß falangkinjau

02.01.2007 - 15:10 Uhr

Hallo,
das ist komisch. Bei mir funktioniert es wunderbar.

Poste doch mal ein Beispielcode.

Gruß falangkinjau

02.01.2007 - 14:45 Uhr

Hallo,

das ist keine Problem, sondern richtig.
Dein GridView ist default so eingestellt das die Columns automatisch aus der DataSource beschriftet und erstellt werden. Wenn aber die DataSource nichts hat, dann kann auch nichts generiert werden. Siehe auch AutoGenerateColumns bei DataGridView.

Diese Eigenschaft müsstest du auf false stellen und dich selber um die Erstellung der Columns kümmern. Dann klappt es und du bekommst auch die Spalten angezeigt wenn das Query keine Datensätze zurückliefert.

Gruß falangkinjau

02.01.2007 - 01:25 Uhr

Erstmal ein gesundes neues Jahr.

Hallo Klofisch,
ich weiss nicht ob es noch aktuell ist.
Bin gerade selber am Forschen bezüglich XML-DataSet und habe das mal gleich ausprobiert und so klappt es bei mir und ich erhalte die Darstellung wie im gezeigten Bild.


DataSet KennzahlenDaten = new DataSet();
KennzahlenDaten.ReadXml(xmlfileopen.OpenFile());
this.tab_daten.DataSource = KennzahlenDaten.Tables["Kennzahl"];

Gruß falangkinjau