[英]Refresh or show immediately in datagridview after inserting
我知道在 SOF 中已经多次询问过这个问题,但我向您保证,我尝试了诸如 .refresh、.update、插入后调用该方法等所有内容,但仍然没有任何反应,我需要再次刷新我的用户控件以查看新数据数据网格视图中的更改。 我在 Windows 窗体中实现 MVC 模式方面很新。 在这些代码下方,我删除了一些用于插入的代码,因为这没有问题。 我希望有人能够帮助我。
看法:
public partial class Update : Form
{
private Customer _customer;
public Update(Customer customer)
{
InitializeComponent();
new UpdateController(this);
_customer = customer;
CustomPicturebox.Circle(PreviewImage);
LoadCustomer();
}
}
模型:
public class Customer
{
Connection Con = new Connection();
private readonly string _date = DateTime.Now.ToString("dddd, dd MMMM yyyy");
private readonly string _setDateId = DateTime.Now.ToString("yyyy");
//Get the Customer Fields
public DataTable DataTable = new DataTable();
public DataView DataView = new DataView();
public string _customerId { get; set; }
public string _imagePath { get; set; }
public string _firstName { get; set; }
public string _middleName { get; set; }
public string _lastName { get; set; }
public string _extensionName { get; set; }
public string _gender { get; set; }
public string _contactNumber { get; set; }
public string _email { get; set; }
public string _homeAddress { get; set; }
public string _searchCustomer { get; set; }
public Customer()
{
}
public Customer
(
string customerID,
string imagePath,
string firstName,
string middleName,
string lastName,
string extensionName,
string gender,
string contactNumber,
string email,
string homeAddress
)
{
_customerId = customerID;
_imagePath = imagePath;
_firstName = firstName;
_middleName = middleName;
_lastName = lastName;
_extensionName = extensionName;
_gender = gender;
_contactNumber = contactNumber;
_email = email;
_homeAddress = homeAddress;
}
public void GetID(string customerID)
{
using (var cmd = new SqlCommand("usp_GetCustomerID", Con.GetConnection()))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@customerID", customerID);
using (var reader = cmd.ExecuteReader())
{
if (reader.Read())
{
_customerId = reader["CustomerID"].ToString();
_imagePath = reader["ImagePath"].ToString();
_firstName = reader["FirstName"].ToString();
_middleName = reader["MiddleName"].ToString();
_lastName = reader["LastName"].ToString();
_extensionName = reader["ExtensionName"].ToString();
_gender = reader["Gender"].ToString();
_contactNumber = reader["ContactNumber"].ToString();
_email = reader["Email"].ToString();
_homeAddress = reader["HomeAddress"].ToString();
}
reader.Close();
}
return;
}
}
public void GetCustomerList(DataGridView customerList)
{
using (var cmd = new SqlCommand("usp_GetCustomer", Con.GetConnection()))
{
cmd.CommandType = CommandType.StoredProcedure;
using (var sda = new SqlDataAdapter(cmd))
{
sda.Fill(DataTable);
var bsource = new BindingSource { DataSource = DataTable };
customerList.DataSource = bsource;
}
}
return;
}
public bool IsUpdated()
{
using (var cmd = new SqlCommand("usp_UpdateCustomer", Con.GetConnection()))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@customerID", _customerId);
cmd.Parameters.AddWithValue("@imagePath", _imagePath);
cmd.Parameters.AddWithValue("@firstName", _firstName);
cmd.Parameters.AddWithValue("@middleName", _middleName);
cmd.Parameters.AddWithValue("@lastName", _lastName);
cmd.Parameters.AddWithValue("@extensionName", _extensionName);
cmd.Parameters.AddWithValue("@gender", _gender);
cmd.Parameters.AddWithValue("@contactNumber", _contactNumber);
cmd.Parameters.AddWithValue("@email", _email);
cmd.Parameters.AddWithValue("@homeAddress", _homeAddress);
cmd.ExecuteNonQuery();
return true;
}
}
}
控制器:
class DisplayController
{
private Connection Con = new Connection();
private Customer Customer = new Customer();
private Display _display;
public DisplayController(Display display)
{
_display = display;
Initialize();
Customer.GetCustomerList(_display.customerList);
}
public void Initialize()
{
_display.search.TextChanged += Search_TextChanged;
_display.customerList.CellClick += CustomerList_CellClick;
}
private void CustomerList_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
var row = _display.customerList.Rows[e.RowIndex];
Customer.GetID(row.Cells["ID"].Value.ToString());
DimBackground overlay = new DimBackground(new Update(Customer));
overlay.Show();
}
}
}
我的更新表单的控制器:
class UpdateController
{
private Update _update;
private Customer _customer;
private Display _display = new Display();
public UpdateController(Update update)
{
_update = update;
Initialize();
}
public void Initialize()
{
_update.GetUpdateButton.Click += GetUpdateButton_Click;
_update.GetBrowseButton.Click += GetBrowseButton_Click;
}
private void GetBrowseButton_Click(object sender, EventArgs e)
{
using (OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Filter = "Image Files (*.jpg;*.jpeg;.*.png; | *.jpg;*.jpeg;.*.png;)";
ofd.FilterIndex = 1;
ofd.Multiselect = false;
ofd.Title = "Select Image File";
if (ofd.ShowDialog() == DialogResult.OK)
{
_update.Imagepath = ofd.FileName;
_update.GetImage.Image = Image.FromFile(_update.Imagepath);
}
}
}
private void GetUpdateButton_Click(object sender, EventArgs e)
{
_customer = new Customer
(
_update.LblCustomerID.Text,
_update.Imagepath,
_update.GetFirstName().Text,
_update.GetMiddleName().Text,
_update.GetLastName().Text,
_update.GetExtensionName().Text,
_update.GetGender().Text,
_update.GetContactNumber().Text,
_update.GetEmail().Text,
_update.GetAddress().Text
);
if
(
string.IsNullOrWhiteSpace(_update.GetFirstName().Text) ||
string.IsNullOrWhiteSpace(_update.GetLastName().Text) ||
string.IsNullOrWhiteSpace(_update.GetGender().Text) ||
string.IsNullOrWhiteSpace(_update.GetAddress().Text)
)
{
CustomMessageBox.Message("Please Input the Required Fields", CustomMessageBox.MessageType.Warning);
}
else
{
var result = _customer.IsUpdated() ? true : false;
CustomMessageBox.Message("Updated!", CustomMessageBox.MessageType.Update);
_customer.GetCustomerList(_display.customerList);
}
}
}
您可以创建一个填充 DataGridView 的公共方法并在插入方法中调用函数。
像这样
public DataTable Table()
{
try
{
connectionString = "Data Source = Your Data source ";
connection = new SQLiteConnection(connectionString);
query = "SELECT * From Table";
connection.Open();
adapter = new SQLiteDataAdapter(query, connection);
dataTable = new DataTable();
adapter.Fill(dataTable);
connection.Close();
return dataTable;
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
private void FillDataGrid()
{
dataTable = Table();
dataGridView.DataSource = dataTable;
}
并在插入/更新方法结束时调用此 FillDataGrid()。
您应该将 dataTable 设置为数据源。
public void GetCustomerList(DataGridView customerList)
{
using (var cmd = new SqlCommand("usp_GetCustomer", Con.GetConnection()))
{
cmd.CommandType = CommandType.StoredProcedure;
using (var sda = new SqlDataAdapter(cmd))
{
sda.Fill(dtTable);
customerList.DataSource = dtTable ;
}
}
return;
}
编辑:尽量避免将 DataTable 命名为“DataTable”,而是使用 dtTable。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.