Hi,
Ich hab hier mal ein Beispiel Code. Wenn sich der Wert von "Status" ändert, soll die GUI den Wert in einer TextBox anzeigen.
Ich hoffe so ist es klarer was ich vorhabe. 😃
Dll
namespace DemoDll
{
public class ClassDll
{
public string Status { get; set; }
int milliseconds = 1000;
public void DoSomethingIntheDll()
{
Status = "Start";
for (int i = 0; i < 10; i++)
{
Thread.Sleep(milliseconds);
Status=". "+i;
}
Thread.Sleep(milliseconds);
Status = "Fertig";
}
}
}
Form
namespace FormToTestDll
{
public partial class Form1 : Form
{
DemoDll.ClassDll demoDll = new DemoDll.ClassDll();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
Thread main = new Thread(demoDll.DoSomethingIntheDll);
main.Start();
}
private void button2_Click(object sender, EventArgs e)
{
textBox1.Text=demoDll.Status.ToString();
}
}
}
Hallo Zusammen,
Ich hab mal eine "wahrscheinlich" ganz einfach zu beantwortende Frage.
Ich habe eine dll die mit einer Hardware kommuniziert. Und eine GUI die den Status der Kommunikation anzeigen soll. (Dll und GUI sind selbst geschrieben)
Die dll hat ein Property
public string Status { get; set; }
Die GUI (Form) soll jetzt immer den aktuellen Wert von Status in einer TextBox ausgeben.
Tja aber da habe ich leider keine Ahnung wie man das am besten löst.
Danke für eure Hilfe
Grüße
Steven
Erstmal danke fürs umbenennen.
Die Zertifikate sind meistens mehrseitige PDFs aber die Anzahl der Datensätze bleibt sehr überschaubar.
Die Zertifikate als Byte Blob speichern. Weiß nich ob das geht, wegen Dokumentationspflicht etc. Die Orginaldateien müssen/solten irgendwie gespeichert werden. Und dann gibts auch backups der dateien.
verwendetes Datenbanksystem: SQL2012 Express (noch)
Hallo zusammen,
ich benötige mal eure Hilfe. Und zwar haben wir bei uns in der Firma Geräte die einmal im Jahr zur Kalibrierung verschickt werden müssen.
Zur Zeit wir das alles in einer Excel Tabelle verwaltet und es passiert regelmäßig das die Termine für die nächste Kal. vergessen werden. 8o
Da das natürlich mist ist, gibts da bald ne DB-Anwendung. Eigentlich ganz einfache Sache. Ich hab die Oberfläche fast fertig und der SQL Server verschickt auch schon Mails 30 Tage vor dem Ablaufdatum. Soweit so gut.
Nun aber zum Problem/Frage:
Es sollen auch Zertifikate (in der DB) abgelegt werden. Ich danchte da an eine Filetable. Ich hatte mir das so vorgestellt, dass man im DataGrid per rechtsklick das Dokument einem Datensatz zuordnet.
Wenn ich das richtig verstanden habe muss die Datei dann in den entsprechenden Ordner verschoben werden. (System.IO.File.Move) Kann ich der Filetabel dann die GUID des Datensatzes mitteilen oder lege ich da eine extra Tabelle an mit zwei ID Spalten (DatenTabelle/Filetable). Oder ist die Filetable dafür das falsche Mittel.
Danke schonmal.
Grüße
Steven
Vielen dank für eure Hilfe. Mit dem Beispiel bzw. denkanstoß hat es soweit schonmal geklappt.
var q = (from to in myDB.tblTestObjects
join r in myDB.tblRefFaNoTestObjects on to.TestObjectID equals r.TestObjectID into g1
from fo in g1.DefaultIfEmpty()
group new
{
to.ModelNo,
to.ArticleSN,
to.TestObjectID,
fo.tblFANo.FANo,
}by to.ModelNo);
foreach (var grouping in q)
{
TreeNode nodeFor = new TreeNode();
nodeFor.Name = "Model";
nodeFor.Text = grouping.Key;
nodeFor.Tag = "Model";
treeView.Nodes.Add(nodeFor);
foreach (var item in grouping)
{
TreeNode subitem = new TreeNode();
subitem.Name = "SN";
subitem.Text = item.ArticleSN + " (" + item.FANo+")";
subitem.Tag = item.TestObjectID;
nodeFor.Nodes.Add(subitem);
foreach(var item2 in item) //<- hier soll noch die FaNo ausgeben werden
{
}
}
}
Aber ich brauche noch ein Tipp 😃 Wie mache ich das mit verschachtelten Gruppen. Ich möcht so einen TreeView füllen. Einmal gruppieren ist kein problem nur die zweite Gruppierung bekomm ich nicht hin. D.h. Model und SN klappt nur dazu die untergruppe FaNo klappt nicht.
-Model
----SN
--------FaNo
----SN
--------FaNo
-Model
----SN
Danke und Grüße
Steven
verwendetes Datenbanksystem: <SQL Server LinqToSql>
Hallöchen,
ich habe mal eine Frage ob das geht was ich vorhabe.
Ich habe 3 Tabellen siehe Anhang
Und folgende Abfrage
var querry = from to in myDB.tblTestObjects
join r in myDB.tblRefFaNoTestObjects on to.TestObjectID equals r.TestObjectID
join fa in myDB.tblFANos on r.FANoID equals fa.FANoID
select new
{
to.ModelNo,
to.ArticleSN,
fa.FANo
};
Die Abfrage liefert mir alle einträge aus tblTestObject die auch einen Eintrag in der Referenz Tabelle haben.
Kann man das so umschreiben, dass alle Einträge zurückgegeben werden auch die die keine einträge in der Referenz Tabelle haben. Bin in Linq noch nicht wirklich fit......
So z.B. Result
[0]{ModelNo="test", ArticleSN="1234", FANo= "JD1234"}
[1]{ModelNo="test", ArticleSN="5678", FANo= null} <- Kein Eintrag in der RefTabelle
bzw.
[0]{ModelNo="test", ArticleSN="1234", FANo= "JD1234"}
[1]{ModelNo="test", ArticleSN="5678"}
Geht das?
Danke schonmal und Grüße
Steven
Hi.
habe jetzt mal ein paar dispose hinzu gefügt, leider ohne erfolg.
writer.Dispose();
writer.Close();
reader.Dispose();
reader.Close();
document.Dispose();
document.Close();
PdfContentByte und PdfImportedPage hat kein dispose. Muss man das evt. closen ???
System.Diagnostics.Process.Start(destinationFile); <- Öffnet nur das merge File und das soll nicht gelöscht werden.
Ich bin echt ratlos.
Moin Zusammen,
ich habe folgendes Problem und gehe davon aus das ihr mir helfen könnt. Ist warscheinlich nur ne kleinigkeit. Aber daran verzweifele ich gerade etwas.
Problembeschreibung:
Ich möchte alle PDFs aus einem Verzeichniss mergen (Zusammenfügen) funzt super mit iTextSharp danach soll er die Dateien Zippen das klappt auch noch. Und dann soll er die Dateien löschen, das ZIP natürlich nicht. Das Problem ist das meine Anwendeung den Zugriff auf die Dateien sperrt. Und ich finde leider nicht raus wie ich die Dateien wieder freigebe.
Wenn ich das Mergen weglasse geht es. Also muss es ja in der Merge Routine passieren.
Hier mal ein Code Ausschnitt:
MergePdf(dir1.FullName + "\\" + filenamePDF, filesStoreArray);
try
{
using (ZipFile zip = new ZipFile())
{
zip.StatusMessageTextWriter = System.Console.Out;
zip.AddDirectory(dir1.FullName); // recurses subdirectories
zip.Save(dir1.FullName + "\\"+filenameZIP);
}
foreach (string fileToDel in filesStoreArray)
{
File.Delete(fileToDel); //hier kommt die Exception
}
}
catch (System.Exception ex1)
{
MessageBox.Show(ex1.StackTrace);
}
Und hier die Merge Routine die das Problem veruracht, glaube ich jedenfalls
public void MergePdf(string destinationFile, string[] sourceFiles)
{
try
{
int f = 0;
PdfReader reader = new PdfReader(sourceFiles[f]);
int n = reader.NumberOfPages;
Document document = new Document(reader.GetPageSizeWithRotation(1));
PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(destinationFile, FileMode.Create));
document.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page;
int rotation;
while (f < sourceFiles.Length)
{
int i = 0;
while (i < n)
{
i++;
document.SetPageSize(reader.GetPageSizeWithRotation(i));
document.NewPage();
page = writer.GetImportedPage(reader, i);
rotation = reader.GetPageRotation(i);
if (rotation == 90 || rotation == 270)
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
}
else
{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
f++;
if (f < sourceFiles.Length)
{
reader = new PdfReader(sourceFiles[f]);
n = reader.NumberOfPages;
}
}
document.Close();
System.Diagnostics.Process.Start(destinationFile);
}
catch (Exception e)
{
string strOb = e.Message;
}
}
Vielen Dank schonmal
Gruß
Steven
Moin,
verwendetes Datenbanksystem: SQL Express
ich benötige mal eurer Hilfe bei der bindung von TextBoxen. Und zwar habe ich 2 Tabellen
Diese im Dataset dsCustomer. Verknüpf sind die folgendermassen
DataRelation drel = new DataRelation("rel1", dsCustomer.tblAddresses.Columns["AddressID"], dsCustomer.tblCustomer.Columns["AddressID"]);
Die TextBox für CustomerNo habe ich per Designer gebunden.
this.textBoxCustomerNo.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.tblCustomerBindingSource, "CustomerNo", true));
Zum Navigieren benutze ich den BindingNavigator. Das funzt auch für die TextBoxen der Tabelle tblCustomer.
Jetzt soll eine zweite TextBox die verknüpfte Strasse anzeigen, also Street aus der Tabelle tblAdresses
Könnt ihr mir erklären wie das funktioniert? Mit Databinding bitte.
Ich könnte mir mit DataTable.Select(...) die benötigeten Werte holen aber so will ich das eigentlich nicht machen.
Grüße
Steven
Hm dann sollte ich das so probieren:
User drückt -> Button disable -> Datenbankeintragung als Thread starten -> wenn Thread fertig button wieder enable.
Sehe ich das so richtig?
dazu noch ne Verständnissfrage:
Müsste die GUI nicht erst blockieren nachdem der Button disabled wurde? Werden die befehle nicht stur nach einander abgearbeitet?