AirScout/AirScout/DatabaseEditDlg.cs

148 wiersze
4.8 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ScoutBase.Core;
using ScoutBase.Database;
namespace AirScout
{
public partial class DatabaseEditDlg : Form
{
DataTable Table;
int StartIndexI = 0;
int StartIndexJ = 0;
bool SomethingFound = false;
public DatabaseEditDlg(DataTable table)
{
InitializeComponent();
Table = table;
dgv_Main.DataSource = Table;
}
private void tb_Search_TextChanged(object sender, EventArgs e)
{
// reset search
StartIndexI = 0;
StartIndexJ = 0;
SomethingFound = false;
}
private void FindNext()
{
if (Table == null)
return;
if (String.IsNullOrEmpty(tb_Search.Text))
return;
StartIndexJ++;
if (StartIndexJ > dgv_Main.Columns.Count - 1)
{
StartIndexJ = 0;
StartIndexI = StartIndexI + 1;
if (StartIndexI > dgv_Main.Rows.Count - 1)
{
// end of table reached
if (SomethingFound)
{
if (MessageBox.Show("Reached the end of table.\nNo (more) occurencies found for: " + tb_Search.Text + "\n\nContinue search at the beginning of table?",
"Find Next", MessageBoxButtons.YesNo) != DialogResult.Yes)
return;
// start at the beginning
StartIndexI = 0;
StartIndexJ = 0;
}
else
{
MessageBox.Show("No occurencies found for: " + tb_Search.Text, "Find Next", MessageBoxButtons.OK);
StartIndexI = 0;
StartIndexJ = 0;
SomethingFound = false;
return;
}
}
}
for (int i = StartIndexI; i < dgv_Main.Rows.Count; i++)
{
for (int j = StartIndexJ; j < dgv_Main.Columns.Count; j++)
{
if ((dgv_Main.Rows[i].Cells[j].Value != null) && (dgv_Main.Rows[i].Cells[j].Value.ToString().ToUpper().IndexOf(tb_Search.Text.ToUpper()) >= 0))
{
dgv_Main.CurrentCell = dgv_Main.Rows[i].Cells[j];
StartIndexI = dgv_Main.CurrentCell.RowIndex;
StartIndexJ = dgv_Main.CurrentCell.ColumnIndex;
SomethingFound = true;
return;
}
}
StartIndexJ = 0;
}
// set current cell to null if nothing found
dgv_Main.CurrentCell = null;
StartIndexI = dgv_Main.Rows.Count - 1;
StartIndexJ = dgv_Main.Columns.Count - 1;
FindNext();
}
private void btn_FindNext_Click(object sender, EventArgs e)
{
FindNext();
}
private void DatabaseEditDlg_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F3)
FindNext();
}
private void dgv_Main_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F3)
FindNext();
}
private void tb_Search_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F3)
FindNext();
}
private void btn_FindNext_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F3)
FindNext();
}
private void dgv_Main_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
try
{
// update timestamp, if column "LastUpdated" is available
dgv_Main.Rows[dgv_Main.CurrentCell.RowIndex].Cells["LastUpdated"].Value = SupportFunctions.DateTimeToUNIXTime(DateTime.UtcNow);
}
catch (Exception ex)
{
// do nothing
}
}
private void dgv_Main_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
// currently not implemented
}
private void dgv_Main_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
{
// currently not implemented
}
private void dgv_Main_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
// occurs when a BLOB was read from database
// do nothing
}
}
}