Hi,
I am facing a very strange problem with DataGridview used for my WindowsApplication. I am using entity framework and .net framework 4 for the application. The issue I am facing is, when i click the Search Button I am displaying the values on a DataGridView and user can edit the ParameterValue which is an editable cell. However, What happens when I edit a cell and move the control to the next cell the value of the previous cell is lost and becoming empty. I am trying to find a fix for this issue. Please help.
Step 1: Entered a value as highlighted
Step2 : After entering the value I am moving my control to the next cell. I am lost. the previous value is not retained
Source code for the Windows form is mentioned below. Please let me know which event I should call to retain the value of the gridview cell.
using System;
using System.Linq;
using System.Windows.Forms;
using System.Data.Entity;
using System.Collections.Generic;
using BiDashBoard.DAL;
namespace BiDashBoard
{
public partial class BiDashBoardUI : Form
{
BiDashBoard.DAL.Entities dataContext = new DAL.Entities();
List<Area> lstArea = new List<Area>();
public BiDashBoardUI()
{
InitializeComponent();
BiDataGridView.Visible = false;
labelWarning.Visible = false;
dataContext.EPMSBiParamMasters.Load();
dataContext.EPMSBiTransactions.Load();
// BiDataGridView.ReadOnly = false;
}
private void button1_Click(object sender, EventArgs e)
{
var query= from c in dataContext.EPMSBiTransactions
join p in dataContext.EPMSBiParamMasters on c.ParamCode equals p.ParameterCode
where c.ParamDate >= dateTimePickerStart.Value && c.ParamDate <= dateTimePickerEnd.Value
select new { c.ParamDate,p.ParameterCode,p.ParameterDescription,c.ParameterValue } ;
// var results = query.ToList().OrderBy(p=>p.ParamDate);
var results = query.ToList();
if (results.Count() > 0)
{
BiDataGridView.Visible = true;
BiDataGridView.DataSource = null;
//Set AutoGenerateColumns False
BiDataGridView.AutoGenerateColumns = false;
// Set Columns Count
BiDataGridView.ColumnCount = 4;
// Add Columns
BiDataGridView.Columns[0].Name = "ParamDate";
BiDataGridView.Columns[0].HeaderText = "ParamDate";
BiDataGridView.Columns[0].DataPropertyName = "ParamDate";
BiDataGridView.Columns[1].Name = "ParameterCode";
BiDataGridView.Columns[1].HeaderText = "ParameterCode";
BiDataGridView.Columns[1].DataPropertyName = "ParameterCode";
BiDataGridView.Columns[2].HeaderText = "Parameter Description";
BiDataGridView.Columns[2].Name = "ParameterDescription";
BiDataGridView.Columns[2].DataPropertyName = "ParameterDescription";
BiDataGridView.Columns[2].Width = 500;
BiDataGridView.Columns[3].Name = "ParameterValue";
BiDataGridView.Columns[3].HeaderText = "ParameterValue";
BiDataGridView.Columns[3].DataPropertyName = "ParameterValue";
BiDataGridView.ReadOnly = false;
BiDataGridView.Columns[0].ReadOnly = true;
BiDataGridView.Columns[1].ReadOnly = true;
BiDataGridView.Columns[2].ReadOnly = true;
BiDataGridView.Columns[3].ReadOnly = false;
BiDataGridView.DataSource = results;
labelWarning.Visible =false;
}
else
{
labelWarning.Visible = true;
BiDataGridView.DataSource = null;
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonUpdate_Click(object sender, EventArgs e)
{
//var query = from c in dataContext.EPMSBiTransactions
// // join p in dataContext.EPMSBiParamMasters on c.ParamCode equals p.ParameterCode
// where c.ParamDate >= dateTimePickerStart.Value && c.ParamDate <= dateTimePickerEnd.Value
// select new { c.ParamDate,c.ParameterValue };
//foreach (var product in query.ToList())
//{
// if (product.ParameterValue == null)
// {
// query.ToList().Remove(product);
// }
//}
foreach (var product in dataContext.EPMSBiTransactions.Where(c=>c.ParamDate >= dateTimePickerStart.Value && c.ParamDate <= dateTimePickerEnd.Value ))
{
if (product.ParameterValue == null)
{
dataContext.EPMSBiTransactions.Remove(product);
}
}
dataContext.SaveChanges();
// Refresh the grids so the database generated values show up.
this.BiDataGridView.Refresh();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BiDataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
{
if (BiDataGridView.CurrentCell.ColumnIndex == BiDataGridView.Columns.IndexOf(BiDataGridView.Columns["ParameterValue"]))
{
BiDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly = false;
BiDataGridView.CurrentCell = BiDataGridView[e.ColumnIndex, e.RowIndex];
BiDataGridView.BeginEdit(false);
}
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BiDataGridView_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
DataGridViewCell cell = BiDataGridView[e.ColumnIndex, e.RowIndex];
}
private void BiDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
}
private void BiDataGridView_MouseClick(object sender, MouseEventArgs e)
{
// BiDataGridView.BeginEdit(false);
}
private void BiDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
foreach (var values in BiDataGridView.Rows)
{
DataGridViewCell cell = BiDataGridView[e.ColumnIndex, e.RowIndex];
if (cell.EditedFormattedValue != null)
{
var cellvalues = cell.EditedFormattedValue.ToString();
}
}
}
private void BiDataGridView_CurrentCellChanged(object sender, EventArgs e)
{
}
private void BiDataGridView_RowValidated(object sender, DataGridViewCellEventArgs e)
{
DataGridViewCell cell = BiDataGridView[e.ColumnIndex, e.RowIndex];
}
private void BiDataGridView_SelectionChanged(object sender, EventArgs e)
{
}
private void BiDataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if ((BiDataGridView.IsCurrentCellDirty) & (BiDataGridView.CurrentCell.ColumnIndex == 0))
{
BiDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
private void BiDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
BiDataGridView.Invalidate();
}
private void BiDataGridView_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
if (e.StateChanged != DataGridViewElementStates.Selected) return;
}//
} //class
} //method
Entity DBContext filenamespace BiDashBoard.DAL
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class Entities : DbContext
{
public Entities()
: base("name=Entities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public DbSet<EPMSBiParamMaster> EPMSBiParamMasters { get; set; }
public DbSet<EPMSBiTransaction> EPMSBiTransactions { get; set; }
}
}I am using ADO.netEntityDataModel for my project.Please help
-pep