1、新增一行:如果数据源没有数据,就要添加一个新行
#region
if (this.gvDetail.RowCount > 0)
{
this.gvDetail.UpdateCurrentRow();
}
DataTable dt = (DataTable)this.gridDetail.DataSource;
if (dt == null)
{
dt = new DataTable();
dt.Columns.Add("DETAILID");
dt.Columns.Add("ROUTEORDER");
dt.Columns.Add("PRODUCTID");
dt.Columns.Add("PRODUCTNAME");
dt.Columns.Add("SUBPRODUCTDEMANDDATE");
dt.Columns.Add("SUBPRODUCTDEMANDDATENAME");
dt.Columns.Add("CREATETIME");
dt.Columns.Add("ISADD");
}
DataRow dr = dt.NewRow();
dr["CREATETIME"] = DateTime.Now.ToString("yyyy/MM/dd HH:mm");//新增日期
dr["ISADD"] = "Y";//新增行的标志
dt.Rows.Add(dr);
dtSubProductDataSource = dt.Copy();
//dtSubProductBackUp = dt.Copy();
this.gridDetail.DataSource = dt;
this.gvDetail.RefreshData();
this.gvDetail.FocusedRowHandle = this.gvDetail.RowCount - 1;
this.gvDetail.FocusedColumn = this.gridColRouteOrder; //设置焦点列
#endregion
2、删除一行:
if (this.gvDetail.GetSelectedRows().Length == 0)
{
MessageUtil.ShowTips("请选择一条需要删除的数据!");
return;
}
DialogResult dialog = MessageUtil.ShowOKCancelTips("是否删除当前行?");
if (dialog == DialogResult.Cancel) { return; }
//获取是否新增的标志值
string isAdd = CommonUtils.ObjectToString(this.gvDetail.GetRowCellValue(this.gvDetail.GetSelectedRows()[0], "ISADD"));
if ("Y".Equals(isAdd))
{
//在界面新增的数据直接删除
this.gvDetail.DeleteRow(this.gvDetail.GetSelectedRows()[0]);
this.gvDetail.UpdateCurrentRow();
}
else
{
//从后台取出来的数据,删除时先保存在proGroupDetailDeletedModel ,点击保存以后再从数据库删除
string detialId = this.gvDetail.GetRowCellValue(this.gvDetail.GetSelectedRows()[0], "DETAILID").ToString(); //
ProductGroupDetail proDetial = new ProductGroupDetail();
proDetial.DetailID = Int32.Parse(detialId);
proGroupDetailDeletedModel.Add(proDetial);
//删除数据源中的数据
this.gvDetail.DeleteRow(this.gvDetail.GetSelectedRows()[0]);
this.gvDetail.UpdateCurrentRow();
dtSubProductDataSource.AcceptChanges(); //刷新数据源,表格的数据删除后,数据源会自动刷新
}
3、循环遍历所有行,获取表格的值:
private bool JudeDetailData(out List<ProductGroupDetail> detailList)
{
#region
bool result = false;
string message = "";
detailList = new List<ProductGroupDetail>();//返回的列表
if (this.gvDetail.RowCount <= 0)
{
MessageUtil.ShowTips("没有添加!");
return false;
}
try
{
int rowCount = this.gvDetail.RowCount;
string routeOrderList = ",";//存放所有的,用于判断是否重复
string subProductIdList = ",";//存放所有的,用于判断是否重复
for (int i = 0; i < rowCount; i++)
{
ProductGroupDetail detail = new ProductGroupDetail();
DataRow dr = this.gvDetail.GetDataRow(i);
string isadd = dr["ISADD"].ToString();
detail.IsAdd = isadd;
//获取
if (!"Y".Equals(isadd))
{
detail.DetailID = Int32.Parse(dr["DETAILID"].ToString());
}
//
string routeOrder = dr["ROUTEORDER"].ToString();
if (routeOrder.Length <= 0)
{
message += "第" + (i+1).ToString() + "行的不能为空";
this.gvDetail.FocusedRowHandle = i;
this.gvDetail.FocusedColumn = this.gvDetail.Columns[""];
break;
}
//判断是否重复
if (routeOrderList.IndexOf("," + routeOrder + ",") > -1)
{
message += "第" + (i + 1).ToString() + "行的不能重复";
this.gvDetail.FocusedRowHandle = i;
break;
}
detail.RouteOrder = Int32.Parse(routeOrder);
routeOrderList += routeOrder + ",";
//
string subProductId = dr["PRODUCTID"].ToString();
string subProductName = dr["PRODUCTNAME"].ToString();
if (subProductId.Length <= 0 || subProductName.Length<=0)
{
message += "第" + (i + 1).ToString() + "行不能为空";
this.gvDetail.FocusedRowHandle = i;
break;
}
//判断是否重复
if (subProductIdList.IndexOf("," + subProductId + ",") > -1)
{
message += "第" + (i + 1).ToString() + "行的不能重复";
this.gvDetail.FocusedRowHandle = i;
break;
}
detail.SubProductID = Int32.Parse(subProductId);
subProductIdList += subProductId + ",";
//
string subMandDate = dr["SUBPRODUCTDEMANDDATE"].ToString();
if (subMandDate.Length <= 0)
{
message += "第" + (i + 1).ToString() + "行的不能为空";
this.gvDetail.FocusedRowHandle = i;
break;
}
detail.SubProductDemandDate = Int32.Parse(subMandDate);
detailList.Add(detail);
}
}
catch (Exception ex)
{
message = "获取异常:" + ex.Message;
}
//返回值
if (message.Length > 0)
{
MessageUtil.ShowTips(message);
result = false;
}
else
{
result = true;
}
return result;
#endregion
}
4、行编辑的下拉框:要实现的方法
//表格编辑下拉框,在列SUBPRODUCTDEMANDDATE 绑定key值
private void cbDemandDate_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBoxEdit comboBoxEdit = (ComboBoxEdit)sender;
ComboxInfo comboxInfo = (ComboxInfo)comboBoxEdit.SelectedItem;
this.gvDetail.SetFocusedRowCellValue(this.gvDetail.Columns["SUBPRODUCTDEMANDDATE"], comboxInfo.Code);
}
//表格编辑下拉框,在列PRODUCTID 绑定id值
private void cbSubProductName_SelectedIndexChanged(object sender, EventArgs e)
{
ComboBoxEdit comboBoxEdit = (ComboBoxEdit)sender;
ComboxInfo comboxInfo = null;
if (comboBoxEdit.SelectedItem != null && comboBoxEdit.SelectedItem.ToString().Length > 0)
{
comboxInfo = (ComboxInfo)comboBoxEdit.SelectedItem;
this.gvDetail.SetFocusedRowCellValue(this.gvDetail.Columns["PRODUCTID"], comboxInfo.Code);
this.gvDetail.SetFocusedRowCellValue(this.gvDetail.Columns["PRODUCTNAME"], comboxInfo.Name);
}
else
{
MessageUtil.ShowTips("输入的值不存在!");
this.gvDetail.SetFocusedRowCellValue(this.gvDetail.Columns["PRODUCTID"], "");
}
}
//表格中使用下拉框控件时必须要实现的事件使用
private void repositoryItemComboBox_ParseEditValue(object sender, ConvertEditValueEventArgs e)
{
try
{
e.Value = CommonUtils.ObjectToString(e.Value);
e.Handled = true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
GridControl光标定位到某一个单元格:
this.gridView1.FocusedRowHandle = 1;//行标
this.gridView1.FocusedColumn = this.dictCode;//某一列
this.gridView1.ShowEditor();//打开行编辑
GridControl添加按钮列:
把列的ColumnEdit属性设置为RepositoryItemButtonEdit
把TextEditStyle属性设置为HideTextEditor;
把Buttons的Kind属性设置为Glyph;
把Button的Caption用于设置文字
把Buttons的TextOption的Appearance的HAlignment属性设置为Near;
ButtonStyle设置为Office2003;