📄 form1.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Diagnostics;
using System.Data.Common;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Timers;
namespace AddEditDeleteDataGridView
{
enum CallFor
{
SqlServerList,
SqlDataBases,
SqlTables
}
public partial class Form1 : Form
{
private string connectionString;
private string sqlQuery;
private SqlConnection connection;
private SqlCommand command;
private SqlDataAdapter adapter;
private SqlCommandBuilder builder;
private DataSet ds;
private DataSet tempDataSet;
private DataTable userTable;
private SQLInfoEnumerator sqlInfo;
private SqlDataReader reader;
private delegate string[] InternalDelegate();
private InternalDelegate intlDelg;
private delegate void AsyncDelegate(IAsyncResult result);
private delegate void TimerDelegate(object sender, ElapsedEventArgs e);
private System.Timers.Timer ticker;
private CallFor called;
private int currentIndex;
private bool isLastPage;
private int totalRecords;
private int currentPageStartRecord;
private int currentPageEndRecord;
private const string getTablesFromDataBase = "SELECT NAME FROM SYSOBJECTS WHERE TYPE = 'U'";
public Form1()
{
InitializeComponent();
btnUpdate.Enabled = false;
sqlInfo = new SQLInfoEnumerator();
grpDataManipulate.Enabled = false;
btnLoadSqlServers.Select();
btnLoadSqlServers.Focus();
prgProgress.Minimum = 0;
prgProgress.Maximum = 200;
ticker = new System.Timers.Timer();
intlDelg = new InternalDelegate(sqlInfo.EnumerateSQLServers);
ticker.Elapsed += new ElapsedEventHandler(ticker_Elapsed);
ticker.Interval = 250;
cmbNoOfRecords.SelectedIndex = 0;
btnFirst.Enabled = false;
btnPrevious.Enabled = false;
btnNext.Enabled = false;
btnLast.Enabled = false;
btnAdd.Enabled = false;
btnUpdate.Enabled = false;
btnDelete.Enabled = false;
cmbNoOfRecords.Enabled = false;
}
private void SetDataObjects()
{
connection = new SqlConnection(connectionString);
command = new SqlCommand(sqlQuery, connection);
adapter = new SqlDataAdapter(command);
builder = new SqlCommandBuilder(adapter);
ds = new DataSet("MainDataSet");
tempDataSet = new DataSet("TempDataSet");
}
private void btnLoad_Click(object sender, EventArgs e)
{
lblLoadedTable.Text = "Loading data from table " + cmbTables.Text.Trim();
btnLoad.Enabled = false;
this.Cursor = Cursors.WaitCursor;
try
{
if (userTable != null)
{
userTable.Clear();
}
userDataGridView.DataSource = null;
userDataGridView.Rows.Clear();
userDataGridView.Refresh();
sqlQuery = "SELECT * FROM [" + cmbTables.Text.Trim() + "]";
SetDataObjects();
connection.Open();
ticker.Start();
adapter.Fill(tempDataSet);
totalRecords = tempDataSet.Tables[0].Rows.Count;
tempDataSet.Clear();
tempDataSet.Dispose();
adapter.Fill(ds, 0, 5, cmbTables.Text.Trim());
userTable = ds.Tables[cmbTables.Text.Trim()];
foreach (DataColumn dc in userTable.Columns)
{
DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
column.DataPropertyName = dc.ColumnName;
column.HeaderText = dc.ColumnName;
column.Name = dc.ColumnName;
column.SortMode = DataGridViewColumnSortMode.Automatic;
column.ValueType = dc.DataType;
userDataGridView.Columns.Add(column);
}
lblLoadedTable.Text = "Data loaded from table: " + userTable.TableName;
lblTotRecords.Text = "Total records: " + totalRecords;
CreateTempTable(0, int.Parse(cmbNoOfRecords.Text.Trim()));
btnPrevious.Enabled = true;
btnFirst.Enabled = true;
btnPrevious.Enabled = true;
btnNext.Enabled = true;
btnLast.Enabled = true;
btnAdd.Enabled = true;
btnUpdate.Enabled = true;
btnDelete.Enabled = true;
cmbNoOfRecords.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
connection.Close();
btnLoad.Enabled = true;
this.Cursor = Cursors.Default;
prgProgress.Value = 0;
prgProgress.Update();
prgProgress.Refresh();
ticker.Stop();
}
}
private void CreateTempTable(int startRecord, int noOfRecords)
{
if (startRecord == 0 || startRecord < 0)
{
btnPrevious.Enabled = false;
startRecord = 0;
}
int endRecord = startRecord + noOfRecords;
if (endRecord >= totalRecords)
{
btnNext.Enabled = false;
isLastPage = true;
endRecord = totalRecords;
}
currentPageStartRecord = startRecord;
currentPageEndRecord = endRecord;
lblPageNums.Text = "Records from " + startRecord + " to "
+ endRecord + " of " + totalRecords;
currentIndex = endRecord;
try
{
userTable.Rows.Clear();
if (connection.State == ConnectionState.Closed)
{
connection.Open();
}
adapter.Fill(ds, startRecord, noOfRecords, cmbTables.Text.Trim());
userTable = ds.Tables[cmbTables.Text.Trim()];
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
connection.Close();
}
userDataGridView.DataSource = userTable.DefaultView;
userDataGridView.AllowUserToResizeColumns = true;
}
private void btnAdd_Click(object sender, EventArgs e)
{
try
{
userDataGridView.ReadOnly = false;
btnAdd.Enabled = false;
btnUpdate.Enabled = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void btnUpdate_Click(object sender, EventArgs e)
{
try
{
connection.Open();
adapter.Update(userTable);
userDataGridView.ReadOnly = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
btnUpdate.Enabled = true;
}
finally
{
btnAdd.Enabled = true;
btnLoad.Enabled = true;
connection.Close();
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Do you really want to delete selected record(s)?",
"Delete Warning", MessageBoxButtons.YesNo,
MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2, 0, false)
== DialogResult.Yes)
{
try
{
connection.Open();
int cnt = userDataGridView.SelectedRows.Count;
for (int i = 0; i < cnt; i++)
{
if (this.userDataGridView.SelectedRows.Count > 0 &&
this.userDataGridView.SelectedRows[0].Index !=
this.userDataGridView.Rows.Count - 1)
{
this.userDataGridView.Rows.RemoveAt(
this.userDataGridView.SelectedRows[0].Index);
}
}
adapter.Update(userTable);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
finally
{
connection.Close();
btnLoad.Enabled = true;
}
}
}
private void btnLoadSqlServers_Click(object sender, EventArgs e)
{
ticker.Start();
btnLoadSqlServers.Enabled = false;
this.Cursor = Cursors.WaitCursor;
cmbSqlServers.Items.Clear();
called = CallFor.SqlServerList;
intlDelg.BeginInvoke(new AsyncCallback(CallBackMethod), intlDelg);
}
void ticker_Elapsed(object sender, ElapsedEventArgs e)
{
if (this.InvokeRequired)
{
this.Invoke(new TimerDelegate(ticker_Elapsed), sender, e);
}
else
{
if (prgProgress.Value == prgProgress.Maximum)
{
prgProgress.Value = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -