выполнение функции / метода в событии нажатия кнопки - PullRequest
0 голосов
/ 16 октября 2019

У меня есть эта коллекция, как видно из приведенного ниже кода, и я пытаюсь выполнить функцию InserData, чтобы вставить данные из коллекции в мою таблицу SQL DB в событии Button_Click_1 и не могу заставить ее работать. Любая помощь?

Код берет данные из полей формы и добавляет в коллекцию. Как только добавление будет завершено, и пользователь завершит добавление, я хочу, чтобы вся коллекция была записана в таблицу данных SQL.

   public class LotData
    {
        public string Lot;
        public string Description { get; set; }
        public int PO { get; set; }
        public string MfgPart { get; set; }
    }

    // code to add from control data to list

    ObservableCollection<LotData> lot = new ObservableCollection<LotData>();

    private ObservableCollection<LotData> LoadCollectionData()
    {
        // List<LotData> lot = new List<LotData>();
        lot.Add(new LotData()
        {
            Lot = LotNo.Text,
            Description = frmDescription.Text,
            PO = int.Parse(frmPO.Text),
            MfgPart = frmMfgPart.Text,
        });
        return lot;
    }

    //button to add list data to datagrid on form
    public void Button_Click(object sender, RoutedEventArgs e)
    {
        gridLotData.ItemsSource = LoadCollectionData();

        LotNo.Text = String.Empty;
        frmMfgPart.Text = string.Empty;
        frmDescription.Text = String.Empty;
        frmMfgPart.Text = string.Empty;
        frmPO.Text = string.Empty;
    }



    private void Button_Click_1(object sender, RoutedEventArgs e)
    //send data from DataGrid to database
    {         
                InserData(LotData);
    }

    public void InserData(LotData lot)
    {

        string strConn = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\Matthew\\QCast.mdf;Integrated Security=True;Connect Timeout=30";
        SqlConnection con = new SqlConnection(strConn);
        con.Open();
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "INSERT into LotData Values (@LotNum)";
        cmd.Connection = con
        cmd.Parameters.AddWithValue("@LotNum", lot.Lot);
        cmd.ExecuteNonQuery();
        con.Close();

    }

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Я думаю, что у вас есть несколько вещей в неправильном месте, и вы воссоздаете коллекцию ObservableCollection. Чтобы добавить все элементы в БД, вам нужно выполнить итерацию:

private const string strConn = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=C:\\Users\\Matthew\\QCast.mdf;Integrated Security=True;Connect Timeout=30";
private ObservableCollection<LotData> lot = new ObservableCollection<LotData>();

public Window1()
{
    InitializeComponent();

    // Bind ItemsSource once
    gridLotData.ItemsSource = lot;
}

public void AddDataToGrid_Click(object sender, RoutedEventArgs e)
{
    // Read data from form and add to collection
    lot.Add(new LotData()
    {
        Lot = LotNo.Text,
        Description = frmDescription.Text,
        PO = int.Parse(frmPO.Text),
        MfgPart = frmMfgPart.Text,
    });

    // Clear entry fields
    LotNo.Text = String.Empty;
    frmMfgPart.Text = string.Empty;
    frmDescription.Text = String.Empty;
    frmMfgPart.Text = string.Empty;
    frmPO.Text = string.Empty;
}

private void WriteCollectionToDb_Click(object sender, RoutedEventArgs e)
{
    using (var conn = new SqlConnection(strConn))
    {
        conn.Open();

        try
        {
            foreach (var lotData in lot)
            {
                using (var command = new SqlCommand("INSERT into LotData Values (@LotNum)", conn))
                {
                    command.Parameters.AddWithValue("LotNum", lotData.Lot);

                    command.ExecuteNonQuery();
                }
            }
        }

        finally
        {
            conn.Close();
        }
    }
}
0 голосов
/ 16 октября 2019

В InserData вам нужно перебрать все элементы в коллекции и затем вставить в БД

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...