private void btnNewEntry_Click(object sender, EventArgs e) { // Get the Next Subtable EntryID var thissubTableId = Convert.ToInt32(ProgSettings.GetNewSubTableId()); var thisSubtableName = ""; var returnVal = ProgSettings.ShowInputDialog(ref thisSubtableName, "subTable Name"); // If the user clicked ok, add the new table if (returnVal != DialogResult.OK) { return; } // Add to the table ProgSettings.SubTableInsert(thissubTableId, lstLangs.SelectedIndex, thisSubtableName, "To be populated", "To be populated"); SubTableId = thissubTableId; // Add it to the listbox and select it lstsubtables.Items.Add(thisSubtableName); var intSubTableListIndex = lstsubtables.Items.IndexOf(thisSubtableName); lstsubtables.SelectedIndex = intSubTableListIndex; // lstsubtables.Items.Count - 1; blnTextChanged = true; btnSave.Enabled = true; mnuSave.Enabled = btnSave.Enabled; }
private void btnSave_Click(object sender, EventArgs e) { if (txtSubTableName.TextLength <= 80) { // First thing we need to do it sync the other tabs data based on the Template if (txtSubtableTemplate.Text.Contains("\r\n")) { // Uses the first line of the template as the headings var header = txtSubtableTemplate.Text; header = header.Substring(0, header.IndexOf("\r\n", StringComparison.Ordinal)); // Renders everything beyond the first line as the table body var body = txtSubtableTemplate.Text; body = body.Substring(body.IndexOf("\r\n", StringComparison.Ordinal) + 2, body.Length - (body.IndexOf("\r\n", StringComparison.Ordinal) + 2)); // Sync the Content tab with the current template txtSubtableContent.Text = ProgSettings.ConvertTemplateToHtml(header, body); // Not technically needed, but render the HTML panel webBrowse.DocumentText = txtSubtableContent.Text; } var dbDocsTableOutput = new StringBuilder(); var outputFolder = Application.ExecutablePath; // Strip the Executable name from the path outputFolder = outputFolder.Substring(0, outputFolder.LastIndexOf(@"\", StringComparison.Ordinal)); var selectedTable = lstsubtables.Text; // If the output folder doesnt exist, create it if (!Directory.Exists(outputFolder + @"\")) { Directory.CreateDirectory(outputFolder + @"\"); } if (SubTableId == 0) // New Record { if (lstLangs.SelectedIndex != 0) { // If English, connect to main table dbDocsTableOutput.AppendLine("-- WARNING: The default entry should really be in english --"); } var newSubtableId = Convert.ToInt32(ProgSettings.GetNewSubTableId()); dbDocsTableOutput.AppendLine( "insert into `dbdocssubtables`(`subtableId`,`languageId`,`subtableName`,`subtablecontent`,`subtableTemplate`) values (" + newSubtableId + "," + lstLangs.SelectedIndex + ",'" + selectedTable + "','" + ProgSettings.PrepareSqlString(txtSubtableContent.Text) + "','" + ProgSettings.PrepareSqlString(txtSubtableTemplate.Text) + "');"); // Open the file for append and write the entries to it using ( var outfile = new StreamWriter(outputFolder + @"\" + ProgSettings.DbName + "_dbdocssubtables.SQL", true)) { outfile.Write(dbDocsTableOutput.ToString()); } // Write the entry out to the Database directly // For an insert, the record is always saved to the primary table, regardless of the language Since the system is English based, it should really have an English // base record. ProgSettings.SubTableInsert(newSubtableId, lstLangs.SelectedIndex, selectedTable, txtSubtableContent.Text, txtSubtableTemplate.Text); SubTableId = newSubtableId; blnTextChanged = false; btnSave.Enabled = false; mnuSave.Enabled = btnSave.Enabled; } else // Updated Record { if (lstLangs.SelectedIndex == 0) { // If English, connect to main table dbDocsTableOutput.AppendLine("delete from `dbdocssubtables` where `subtableId`= " + SubTableId + " and languageId=" + lstLangs.SelectedIndex + ";"); dbDocsTableOutput.AppendLine( "insert into `dbdocssubtables`(`subtableId`,`languageId`,`subtableName`,`subtablecontent`,`subtableTemplate`) values (" + SubTableId + "," + lstLangs.SelectedIndex + ",'" + selectedTable + "','" + ProgSettings.PrepareSqlString(txtSubtableContent.Text) + "','" + ProgSettings.PrepareSqlString(txtSubtableTemplate.Text) + "');"); // Open the file for append and write the entries to it using ( var outfile = new StreamWriter(outputFolder + @"\" + ProgSettings.DbName + "_dbdocssubtables.SQL", true)) { outfile.Write(dbDocsTableOutput.ToString()); } } else { dbDocsTableOutput.AppendLine("delete from `dbdocssubtables_localised` where `subtableId`= " + SubTableId + " and languageId=" + lstLangs.SelectedIndex + ";"); dbDocsTableOutput.AppendLine( "insert into `dbdocssubtable_localised`(`subtableId`,`languageId`,`subtablecontent`,`subtableTemplate`) values (" + SubTableId + "," + lstLangs.SelectedIndex + ",'" + ProgSettings.PrepareSqlString(txtSubtableContent.Text) + "','" + ProgSettings.PrepareSqlString(txtSubtableTemplate.Text) + "');"); // Open the file for append and write the entries to it using ( var outfile = new StreamWriter( outputFolder + @"\" + ProgSettings.DbName + "_dbdocssubtables_localised.SQL", true)) { outfile.Write(dbDocsTableOutput.ToString()); } } // Write the entry out to the Database directly For an update the logic to decide which table to update is in the Update function itself ProgSettings.SubTableUpdate(SubTableId, lstLangs.SelectedIndex, selectedTable, txtSubtableContent.Text, txtSubtableTemplate.Text); blnTextChanged = false; btnSave.Enabled = false; mnuSave.Enabled = btnSave.Enabled; } lblStatus.Text = DateTime.Now + Resources.Save_Complete_for + selectedTable; } else { //Report that the comment is too long for the db MessageBox.Show(this, Resources.Text_Too_Long, Resources.Error_Saving, MessageBoxButtons.OK, MessageBoxIcon.Error); } }