ProTech's home page

ProTech-Online.com

Microsoft c# code example to call SQL stored procedure to pull the Syteline BOM data into Excel workbook.

private void btnIndentedBOM_Click(object sender, RibbonControlEventArgs e)
        {
            frmSiteItem SiteItem = new frmSiteItem();
            if (SiteItem.ShowDialog() == DialogResult.OK)
            {
                if (Globals.ThisAddIn.SytelineSystem != "" && Globals.ThisAddIn.ItemNumber != "")
                {
                    Globals.ThisAddIn.Application.DisplayAlerts = false;
                    foreach (Excel.Worksheet tmpSheet in Globals.ThisAddIn.Application.ActiveWorkbook.Sheets)
                    {
                        if (tmpSheet.Name == "Indented BOM")
                        {
                            tmpSheet.Delete();
                        }
                    }
                    Globals.ThisAddIn.Application.DisplayAlerts = true;
                    Excel.Worksheet IndentedBOMSheet = Globals.ThisAddIn.Application.ActiveWorkbook.Sheets.Add();
                    IndentedBOMSheet.Name = "Indented BOM";
                    int columnCount = 1;
                    foreach (DataColumn tmpCol in dsBOM.Tables["Indented BOM"].Columns)
                    {
                        IndentedBOMSheet.Cells[1, columnCount] = tmpCol.ColumnName;
                        columnCount++;
                    }
                    Excel.Range ColumnNames = IndentedBOMSheet.UsedRange;
                    ColumnNames.NumberFormat = "@";
                    ColumnNames.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
                    ColumnNames.Borders.Weight = Excel.XlBorderWeight.xlThick;
                    ColumnNames.Borders.Color = Excel.XlRgbColor.rgbLightGray;
                    ColumnNames.Font.Bold = true;
                    ColumnNames.Font.Color = Excel.XlRgbColor.rgbWhite;
                    ColumnNames.Interior.Color = Excel.XlRgbColor.rgbSteelBlue;
                    IndentedBOMSheet.Application.ActiveWindow.SplitColumn = 0;
                    IndentedBOMSheet.Application.ActiveWindow.SplitRow = 1;
                    IndentedBOMSheet.Application.ActiveWindow.FreezePanes = true;
                    IndentedBOMSheet.Range["C1"].EntireColumn.NumberFormat = "@";
                    dsBOM.Tables["Indented BOM"].Clear();
                    Testsite1_Indented_BOM_cmd.CommandType = CommandType.StoredProcedure;
                    Testsite1_Indented_BOM_cmd.Parameters.Clear();
                    Testsite1_Indented_BOM_cmd.Parameters.Add("@site", SqlDbType.NVarChar, 20).Value = Globals.ThisAddIn.SytelineSystem;
                    Testsite1_Indented_BOM_cmd.Parameters.Add("@item", SqlDbType.NVarChar, 30).Value = Globals.ThisAddIn.ItemNumber;
                    Testsite1_con.Open();
                    SqlDataReader reader = Testsite1_Indented_BOM_cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        dsBOM.Tables["Indented BOM"].Rows.Add(reader[0].ToString()
                            , reader[1].ToString()
                            , reader[2].ToString()
                            , reader[3].ToString()
                            , reader[4].ToString()
                            , reader[5].ToString()
                            , reader[6].ToString()
                            , reader[7].ToString()
                            , reader[8].ToString()
                            , reader[9].ToString()
                            , reader[10].ToString()
                            , reader[11].ToString()
                            , reader[12].ToString()
                            , reader[13].ToString()
                            , reader[14].ToString()
                            , reader[15].ToString()
                            , reader[16].ToString()
                            );
                    }
                    reader.Close();
                    Testsite1_con.Close();
                    int rowCount = 0;
                    String[,] itemArray = new String[dsBOM.Tables["Indented BOM"].Rows.Count, dsBOM.Tables["Indented BOM"].Columns.Count];
                    foreach (DataRow tmpCol in dsBOM.Tables["Indented BOM"].Rows)
                    {
                        for (int x = 0; x < tmpCol.ItemArray.Count(); x++)
                        {
                            itemArray[rowCount, x] = tmpCol.ItemArray[x].ToString();
                        }
                        rowCount++;
                    }
                    for (int x = itemArray.GetLength(0) - 1; x >= 0; x--)
                    {
                        BOM_Item_Qty_Total = Convert.ToDouble(itemArray[x, 3]);
                        int level = Convert.ToInt32(itemArray[x, 1]);
                        BOM_Recursive_totals(x, level, itemArray);
                        itemArray[x, 17] = BOM_Item_Qty_Total.ToString();
                    }
                    IndentedBOMSheet.Application.ScreenUpdating = false;
                    Excel.Range c1 = (Excel.Range)IndentedBOMSheet.Cells[2, 1];
                    Excel.Range c2 = (Excel.Range)IndentedBOMSheet.Cells[dsBOM.Tables["Indented BOM"].Rows.Count + 1, dsBOM.Tables["Indented BOM"].Columns.Count];
                    Excel.Range range = IndentedBOMSheet.get_Range(c1, c2);
                    range.Value = itemArray;
                    range.Value = range.Value;
                    range.Columns.EntireColumn.AutoFit();
                    Call_VBA("IndentedBOM");
                    IndentedBOMSheet.Application.ScreenUpdating = true;
                }
            }
        }
        private void BOM_Recursive_totals(int current_index, int level, string[,] itemArray)
        {
            int check_level = level - 1;
            if (check_level > 0)
            {
                for (int x = current_index - 1; x >= 0; x--)
                {
                    if (Convert.ToInt32(itemArray[x, 1]) == check_level)
                    {
                        BOM_Item_Qty_Total *= Convert.ToDouble(itemArray[x, 3]);
                        BOM_Recursive_totals(x, check_level, itemArray);
                        break;
                    }
                }
            }
        }


Copyright © 2013 ProTechs-Online.com; All rights reserved.