110,536
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 复制新增明细
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected virtual void bCopyAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
//无效行返回
if (gridViewData.FocusedRowHandle < 0)
{
e.SetCancel();
return;
}
}
/// <summary>
/// 编辑明细
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected virtual void bEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
//无效行返回
if (gridViewData.FocusedRowHandle < 0)
{
e.SetCancel();
return;
}
}
/// <summary>
/// 双击行,用于打开编辑窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridViewData_DoubleClick(object sender, EventArgs e)
{
//无效行返回
if (gridViewData.FocusedRowHandle < 0)
{
e.SetCancel();
return;
}
//等效于编辑操作
bEdit.PerformClick();
}
/// <summary>
/// 删除明细
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected virtual void bDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
//无效行返回
if (gridViewData.FocusedRowHandle < 0)
{
e.SetCancel();
return;
}
//提示是否删除
var result = XtraMsgBox.Show("是否删除明细?", MessageType.Question, MessageBoxDefaultButton.Button1);
if (result == System.Windows.Forms.DialogResult.No)
{
e.SetCancel();
return;
}
}
/// <summary>
/// 保存按钮功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected virtual void lbSave_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (HeadService != null)
{
//数据校验和提示
var listValidResults = HeadService.DoAllValidate();
if (listValidResults.Count > 0)
{
string message = listValidResults.GetMessage();
XtraMsgBox.Show(message);
e.SetCancel();
return;
}
}
//保存
ResultEventArgs result = new ResultEventArgs();
OnSave(result);
if (result.IsCanceled()) return;
//执行保存后事件
if (Saved != null) Saved(this.editMode, this.headModel, result);
if (result.IsCanceled()) return;
this.editMode = DataEditWinMode.Edit;
}
/// <summary>
/// 保存并关闭按钮功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected virtual void lbSaveClose_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (HeadService != null)
{
//数据校验和提示
var listValidResults = HeadService.DoAllValidate();
if (listValidResults.Count > 0)
{
string message = listValidResults.GetMessage();
XtraMsgBox.Show(message);
e.SetCancel();
return;
}
}
//保存
ResultEventArgs result = new ResultEventArgs();
OnSave(result);
if (result.IsCanceled()) return;
//执行保存后事件
if (Saved != null) Saved(this.editMode, this.headModel, result);
if (result.IsCanceled()) return;
//关闭编辑
this.DialogResult = System.Windows.Forms.DialogResult.OK;
this.Close();
}
/// <summary>
/// 关闭按钮功能
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected virtual void lbClose_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
this.Close();
}
/// <summary>
/// 自动绘制指示列
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected virtual void gridViewData_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
/// <summary>
/// 设定自定义行高
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected virtual void gridViewData_CalcRowHeight(object sender, DevExpress.XtraGrid.Views.Grid.RowHeightEventArgs e)
{
//设置首行的行高不变,解决行上显示图片的问题
if (e.RowHandle == GridControl.AutoFilterRowHandle) e.RowHeight = -1;
}
/// <summary>
/// 通用右键菜单
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridViewData_PopupMenuShowing(object sender, DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventArgs e)
{
if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Row) //数据行右键菜单
{
e.Menu.Items.Add(new DXMenuItem("复制单元格", new EventHandler(CopyCellData), Properties.Resources.copy_16x16));
}
}
/// <summary>
/// 复制单元格
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void CopyCellData(object sender, EventArgs e)
{
object foValue = this.gridViewData.GetFocusedValue();
if (foValue != null) Clipboard.SetDataObject(foValue.ToString());
}
public partial class FormBillEdit : XtraForm
{
/// <summary>
/// 窗体加载状态
/// </summary>
protected bool isLoading;
/// <summary>
/// 窗体修改数据打开的模式
/// </summary>
protected DataEditWinMode editMode;
/// <summary>
/// 单据表头Model
/// </summary>
protected object headModel;
/// <summary>
/// 单据编辑行在记录列表中的位置
/// 初始值 -1 表示处于非编辑状态
/// </summary>
protected int editIndex = -1;
/// <summary>
/// 复制新增用Model
/// </summary>
protected object copySourceModel;
/// <summary>
/// 共享主窗体的元数据
/// </summary>
protected CachingBase metaData;
/// <summary>
/// 保存父列表窗体的数据列表
/// </summary>
protected List<object> parentModelList;
/// <summary>
/// 当窗体作为Dialog打开时,作为传入的定义参数
/// </summary>
public List<object> DialogArgumentList = new List<object>();
/// <summary>
/// 当窗体作为Dialog打开时,其返回的对象可以存在此列表中
/// </summary>
public List<object> DialogResultList = new List<object>();
/// <summary>
/// 打印预览窗体
/// </summary>
protected ReportPrintTool printTool { get; set; }
/// <summary>
/// 保存成功后调用的事件,一般用于刷新父窗体的列表内容
/// </summary>
public event Action<DataEditWinMode, object, ResultEventArgs> Saved;
/// <summary>
/// 用于管理单据主数据区的列设置的服务
/// </summary>
public EditFormService HeadService { get; set; }
/// <summary>
/// 用于管理GridControl数据区的列设置的服务
/// </summary>
protected GridControlService GridService { get; set; }
/// <summary>
/// 构造方法:默认 保留此构造方法,是为了能够正常显示UI设计器,但new对象时不需要此方法,所以修饰为private
/// </summary>
private FormBillEdit()
{
InitializeComponent();
}
/// <summary>
/// 构造方法:新增
/// </summary>
/// <param name="modelList"></param>
/// <param name="metaData"></param>
public FormBillEdit(List<object> modelList, CachingBase metaData)
: base()
{
InitializeComponent();
this.editMode = DataEditWinMode.Add;
this.headModel = null;
this.metaData = metaData;
this.parentModelList = modelList;
this.Text = "新增单据";
}
/// <summary>
/// 构造方法:编辑/复制新增
/// </summary>
/// <param name="model"></param>
/// <param name="modelList"></param>
/// <param name="metaData"></param>
/// <param name="isCopyAdd"></param>
public FormBillEdit(object model, List<object> modelList, CachingBase metaData, bool isCopyAdd = false)
: base()
{
InitializeComponent();
this.editMode = isCopyAdd ? DataEditWinMode.CopyAdd : DataEditWinMode.Edit;
this.headModel = model;
this.metaData = metaData;
this.parentModelList = modelList;
copySourceModel = ((BaseModel)headModel).Clone();
this.Text = isCopyAdd ? "复制单据" : "编辑单据";
}
/// <summary>
/// 窗体载入
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected virtual void Form_Load(object sender, EventArgs e)
{
isLoading = true;
//设置指示行宽度,配合自绘中加入行号
gridViewData.IndicatorWidth = 40;
InitialData(true);
}
/// <summary>
/// 窗体载入时,初始化数据
/// </summary>
/// <param name="isOpenInitial"></param>
protected virtual void InitialData(bool isOpenInitial)
{
//设定编辑行
if (editMode == DataEditWinMode.Edit)
{
this.editIndex = parentModelList.FindIndex(c => object.ReferenceEquals(c, headModel));
}
}
private void btnSubmit_Click(object sender, EventArgs e)
{
IntelligentPaperDataEntities ctx = new IntelligentPaperDataEntities(Program.connectString);
try
{
if (ctx.Connection.State != ConnectionState.Open)
ctx.Connection.Open();
//1.生成单号
//2.创建对象 ctx.ProductOffLineOrders.AddObject(order);
//3.修改相关对象
int count2 = ctx.SaveChanges();
MessageBox.Show("操作成功!\n影响行数:" + count2);
}
catch (Exception ex)
{
MessageBox.Show(ex.InnerException.Message);
}
finally
{
ctx.Connection.Close();
ctx.Dispose();
}
}
代码基本都是这么实现的,在一个ObjectContext生命期内完成对象的增删该查,然后提交(含事务)
这样的代码如何重构呢(如果有三个这样的按钮位于不同界面,但里面的逻辑基本不一样)