using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.Text.RegularExpressions; using System.Globalization; using System.Data; using RoboforkApp.DataModel; namespace RoboforkApp { /// /// Interaction logic for EditNode.xaml /// public partial class EditNodeWindow : Window { /// /// SourceDataView /// private DataView SourceDataView { get; set; } public DataTable ListModeDataTable = new DataTable(); public string txtMode; public string _txtMode { get { return txtMode; } set { txtMode = value; } } public string txtMode1; public string _txtMode1 { get { return txtMode1; } } public string txtMode2; public string _txtMode2 { get { return txtMode2; } } public string txtMode3; public string _txtMode3 { get { return txtMode3; } } public bool ExitFlg = false; public bool _ExitFlg { get { return ExitFlg; } } public List NodeInf_List { get { return NodeInf_Lst; } set { NodeInf_Lst = value; } } //List NodeInf_Lst = new List(); public List NodeInf_Lst = new List(); public EditNodeWindow() { InitializeComponent(); } private void Window_Loaded(object sender, RoutedEventArgs e) { Load_Form(); } public void Load_Form() { int rowSelected = 0; ListModeDataTable.Columns.Add("NO", typeof(int)); ListModeDataTable.Columns.Add("MODE", typeof(string)); ListModeDataTable.Columns.Add("SPEED", typeof(string)); ListModeDataTable.Columns.Add("ANGLE", typeof(string)); ListModeDataTable.Columns.Add("HIGHT", typeof(string)); ListModeDataTable.Columns.Add("MODESELECTED", typeof(double)); if (NodeInf_Lst.Count > 0) { for (int i = 0; i < NodeInf_Lst.Count; i++) { string strMode = NodeInf_Lst[i].Mode; string strSpeed = NodeInf_Lst[i].Speed.ToString(); string strAngle = NodeInf_Lst[i].Angle.ToString(); string strHeight = NodeInf_Lst[i].Height.ToString(); int intMode = NodeInf_Lst[i].ModeSelected; ListModeDataTable.Rows.Add(i + 1, NodeInf_Lst[i].Mode, strSpeed, strAngle, strHeight, intMode); } } for (int i = 0; i < ListModeDataTable.Rows.Count; i++) { if (ListModeDataTable.Rows[i]["MODESELECTED"].ToString() == "1") { rowSelected = i; } } //ListEditNodeData.SelectedIndex = rowSelected; SourceDataView = new DataView(ListModeDataTable); ListEditNodeData.ItemsSource = SourceDataView; cbMode.Focus(); cbMode.Text = ""; txtSpeed.Text = "0"; txtAngle.Text = "0"; txtHight.Text = "0"; } private void btnEditNode_Click(object sender, RoutedEventArgs e) { string tag = ((Button)sender).Tag.ToString(); switch (tag) { case "ADDMODE": if (!checkFloat(txtSpeed.Text) || !checkFloat(txtAngle.Text) || !checkFloat(txtHight.Text)) { MessageBox.Show("Please Check Again!"); break; } if ((cbMode.Text.Trim() == "") || (txtSpeed.Text.Trim() == "")) { MessageBox.Show("Please Check Again!"); break; } CreateMode(); clearField(); break; case "DELETEMODE": DeleteMode(); break; case "No": ExitFlg = true; this.Close(); break; case "Save": if (!checkFloat(txtSpeed.Text) || !checkFloat(txtAngle.Text) || !checkFloat(txtHight.Text)) { MessageBox.Show("Please Check Again!"); break; } NewDoBeginSave(); MessageBox.Show("Data is saved"); this.Close(); break; default: break; } } public void DeleteMode() { int rowIndex = -1; rowIndex = ListEditNodeData.SelectedIndex; if (rowIndex < 0) { rowIndex = ListModeDataTable.Rows.Count - 1; } if (rowIndex < 0) { return; } ListModeDataTable.Rows[rowIndex].Delete(); ListModeDataTable.AcceptChanges(); for (int i = 0; i < ListModeDataTable.Rows.Count; i++) { ListModeDataTable.Rows[i]["NO"] = i + 1; } ListModeDataTable.AcceptChanges(); } public void CreateMode() { int count = ListModeDataTable.Rows.Count; ListModeDataTable.Rows.Add(count + 1, cbMode.Text, txtSpeed.Text, txtAngle.Text, txtHight.Text, 0); ListModeDataTable.AcceptChanges(); } public void NewDoBeginSave() { int rowSelected = -1; rowSelected = ListEditNodeData.SelectedIndex; if (rowSelected < 0) { rowSelected = 0; } NodeInf_Lst.Clear(); for (int i = 0; i < ListModeDataTable.Rows.Count; i++) { ListNodeInfo ni = new ListNodeInfo(); ni.Mode = ListModeDataTable.Rows[i]["MODE"].ToString(); if (ListModeDataTable.Rows[i]["SPEED"].ToString() != "") { ni.Speed = double.Parse((ListModeDataTable.Rows[i]["SPEED"].ToString())); } if (ListModeDataTable.Rows[i]["ANGLE"].ToString() != "") { ni.Angle = double.Parse((ListModeDataTable.Rows[i]["ANGLE"].ToString())); } if (ListModeDataTable.Rows[i]["HIGHT"].ToString() != "") { ni.Height = double.Parse((ListModeDataTable.Rows[i]["HIGHT"].ToString())); } if(i == rowSelected) { ni.ModeSelected = 1; } else { ni.ModeSelected = 0; } NodeInf_Lst.Add(ni); } } //Check input string is Float format public bool checkFloat(string st) { bool flg = false; Regex regex = new Regex(@"^[0-9]*(?:\.[0-9]*)?$"); flg = regex.IsMatch(st); return flg; } public void clearField() { cbMode.Text = ""; txtSpeed.Text = "0"; txtAngle.Text = "0"; txtHight.Text = "0"; } private void txtSpeed_LostFocus(object sender, RoutedEventArgs e) { if(txtSpeed.Text.Trim() == "") { txtSpeed.Text = "0"; } } private void txtAngle_LostFocus(object sender, RoutedEventArgs e) { if (txtAngle.Text.Trim() == "") { txtAngle.Text = "0"; } } private void txtHight_LostFocus(object sender, RoutedEventArgs e) { if (txtHight.Text.Trim() == "") { txtHight.Text = "0"; } } } }