![]() |
| 编程社区 » vb.net编程 » 高分求教:问在DataGrid中如何添加一列CheckBox |
高分求教:问在DataGrid中如何添加一列CheckBox |
fool_chen |
发表:
|
我的思路是:1.先给表增加一个临时字段(设为布尔值)
2.重新加载表格
不知是否有用.
/// <summary>
/// 设置DataGrid样式
/// </summary>
private void SetDataGridStyle()
{
DataGridTableStyle dgts = new DataGridTableStyle();
dgts.DataGrid = this.DetailDataGrid;
dgts.MappingName = this.myUncDTs[1].TableName;
dgts.AllowSorting = false;
DataGridTextBoxColumn dgtbc = new DataGridTextBoxColumn();
dgtbc.FormatInfo = null;
dgtbc.Format = "";
dgtbc.HeaderText = "商品简码";
dgtbc.MappingName = "p_BarCode";
dgtbc.NullText = "";
dgtbc.Width = 80;
dgtbc.ReadOnly = true;
if( !this.FAction.Equals( Config.Actions.VIEW ) )
{
this.SetTextBoxButton( dgtbc,2 );
((TextBox)dgtbc.TextBox.Controls[0]).CharacterCasing = CharacterCasing.Upper;
}
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.FormatInfo = null;
dgtbc.Format = "";
dgtbc.HeaderText = "商品编码";
dgtbc.MappingName = "p_Code";
dgtbc.NullText = "";
dgtbc.Width = 80;
dgtbc.ReadOnly = true;
if( !this.FAction.Equals( Config.Actions.VIEW ) )
{
this.SetTextBoxButton( dgtbc,2 );
((TextBox)dgtbc.TextBox.Controls[0]).CharacterCasing = CharacterCasing.Upper;
}
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.FormatInfo = null;
dgtbc.Format = "";
dgtbc.HeaderText = "通用名";
dgtbc.MappingName = "p_NM";
dgtbc.NullText = "";
dgtbc.Width = 80;
dgtbc.ReadOnly = true;
if( !this.FAction.Equals( Config.Actions.VIEW ) )
this.SetTextBoxButton( dgtbc,2 );
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.FormatInfo = null;
dgtbc.Format = "";
dgtbc.HeaderText = "商品全称";
dgtbc.MappingName = "p_FullName";
dgtbc.NullText = "";
dgtbc.Width = 100;
dgtbc.ReadOnly = true;
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.FormatInfo = null;
dgtbc.Format = "";
dgtbc.HeaderText = "商品批号";
dgtbc.MappingName = "a_BatchNo";
dgtbc.NullText = "";
dgtbc.Width = 90;
dgtbc.ReadOnly = true;
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.FormatInfo = null;
dgtbc.Format = "";
dgtbc.HeaderText = "商品规格";
dgtbc.MappingName = "p_Standard";
dgtbc.NullText = "";
dgtbc.Width = 100;
dgtbc.ReadOnly = true;
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.Alignment = System.Windows.Forms.HorizontalAlignment.Center;
dgtbc.FormatInfo = null;
dgtbc.Format = "";
dgtbc.HeaderText = "销售单位";
dgtbc.MappingName = "p_UnitSale";
dgtbc.NullText = "";
dgtbc.Width = 60;
dgtbc.ReadOnly = true;
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.Alignment = System.Windows.Forms.HorizontalAlignment.Right;
dgtbc.FormatInfo = null;
dgtbc.Format = "#,###,##0.00;-#,###,##0.00; ";
dgtbc.HeaderText = "出库单价";
dgtbc.MappingName = "p_Price";
dgtbc.NullText = "";
dgtbc.Width = 100;
dgtbc.ReadOnly = true;
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.Alignment = System.Windows.Forms.HorizontalAlignment.Right;
dgtbc.FormatInfo = null;
dgtbc.Format = "#,###,##0.000;-#,###,##0.000; ";
dgtbc.HeaderText = "报损数量";
dgtbc.MappingName = "a_Quantity";
dgtbc.NullText = "";
dgtbc.Width = 100;
dgtbc.ReadOnly = true;
if( !this.FAction.Equals( Config.Actions.VIEW ) )
this.SetTextBoxButton( dgtbc,1 );
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.Alignment = System.Windows.Forms.HorizontalAlignment.Right;
dgtbc.FormatInfo = null;
dgtbc.Format = "#,###,##0.00;-#,###,##0.00; ";
dgtbc.HeaderText = "报损金额";
dgtbc.MappingName = "zMoney";
dgtbc.NullText = "";
dgtbc.Width = 100;
dgtbc.ReadOnly = true;
dgts.GridColumnStyles.Add( dgtbc );
dgtbc = new DataGridTextBoxColumn();
dgtbc.FormatInfo = null;
dgtbc.Format = "";
dgtbc.HeaderText = "备注";
dgtbc.MappingName = "a_Description";
dgtbc.NullText = "";
dgtbc.Width = 140;
dgtbc.ReadOnly = true;
if( !this.FAction.Equals( Config.Actions.VIEW ) )
this.SetTextBoxButton( dgtbc,1 );
dgts.GridColumnStyles.Add( dgtbc );
this.DetailDataGrid.TableStyles.Add( dgts );
}
/// <summary>
/// 置入一个子TextBox控件和Button控件到DataGridTextBoxColumn
/// </summary>
/// <param name="ControlCount">要置入的子控件数,1表示只置入TextBox控件,2表示置入TextBox和Button控件</param>
/// <returns></returns>
private void SetTextBoxButton( DataGridTextBoxColumn inDGTextBoxColumn,int ControlCount )
{
if( ControlCount >= 1 )
{
TextBox tb = new TextBox();
tb.Name = "ctb"+inDGTextBoxColumn.MappingName;
tb.BorderStyle = BorderStyle.None;
tb.TextAlign = inDGTextBoxColumn.Alignment;
tb.Dock = DockStyle.Fill;
tb.DataBindings.Add( "Text",this.DetailDataGrid.DataSource,inDGTextBoxColumn.MappingName );
tb.KeyDown += new KeyEventHandler( this.cTextBox_KeyDown );
inDGTextBoxColumn.TextBox.Controls.Add( tb );
}
if( ControlCount > 1 )
{
Button b = new Button();
b.Cursor = System.Windows.Forms.Cursors.Arrow;
b.BackColor = System.Drawing.SystemColors.Control;
b.Dock = DockStyle.Right;
b.Name = "cb"+inDGTextBoxColumn.MappingName;
b.Width = 24;
b.Text = "…";
b.TextAlign = System.Drawing.ContentAlignment.TopCenter;
b.Click += new EventHandler( this.cButton_Click );
inDGTextBoxColumn.TextBox.Controls.Add( b );
}
inDGTextBoxColumn.TextBox.Enter += new EventHandler( this.toChildFocus );
}
/// <summary>
/// 使子TextBox获得焦点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toChildFocus( object sender,System.EventArgs e )
{
//获取当前列号
this.ColumnIndex = this.DetailDataGrid.CurrentCell.ColumnNumber;
TextBox tb = (TextBox)((TextBox)sender).Controls[0];
tb.SelectAll();
tb.Focus();
}
/// <summary>
/// 子TextBox控件回车事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cTextBox_KeyDown( object sender,System.Windows.Forms.KeyEventArgs e )
{
if( e.KeyCode == Keys.Enter )
{
TextBox ctb = (TextBox)sender;
string Content = ctb.Text.Trim();
//判断是否已经选择出库仓库
if( this.StoreID.Equals("") )
{
uncFunc.ShowWarning( "请选择报损仓库!" );
this.TBStoreName.Focus();
return;
}
switch( ctb.Name )
{
case "ctbp_BarCode": //助记符
if( Content.Equals("") )
{
uncFunc.ShowWarning( "请输入商品助记符" );
ctb.Focus();
return;
}
this.GetProductInfo( ProductList.Conditions.BARCODE,Content,ctb );
break;
case "ctbp_Code": //编号
if( Content.Equals("") )
{
uncFunc.ShowWarning( "请输入商品编号!" );
ctb.Focus();
return;
}
this.GetProductInfo( ProductList.Conditions.CODE,Content,ctb );
break;
case "ctbp_NM": //通用名
if( Content.Equals("") )
{
uncFunc.ShowWarning( "请输入商品通用名!" );
ctb.Focus();
return;
}
this.GetProductInfo( ProductList.Conditions.NM,Content,ctb );
break;
case "ctba_Quantity": //报损数量
this.DetailDataGrid.CurrentCell = new DataGridCell( this.DetailDataGrid.CurrentRowIndex,10 );
try
{
this.myUncDTs[1].Rows[ this.DetailDataGrid.CurrentRowIndex ].EndEdit();
}
catch
{
}
break;
case "ctba_Description": //备注
this.DetailDataGrid.CurrentCell = new DataGridCell( this.DetailDataGrid.CurrentRowIndex + 1,0 );
break;
}
}
}
/// <summary>
/// 按不同的条件获取商品信息
/// </summary>
/// <param name="Condition"></param>
private void GetProductInfo( ProductList.Conditions inCondition,string inValue,TextBox inTB )
{
try
{
int rowindex = this.DetailDataGrid.CurrentRowIndex;
string oldContent = this.myUncDTs[1].Rows[ rowindex ][inTB.Name.Substring( 3,inTB.Name.Length - 3 )].ToString();
if( oldContent.Equals( inValue ) )
{
this.DetailDataGrid.CurrentCell = new DataGridCell( rowindex,8 );
return;
}
}
catch
{
}
ProductList pl = new ProductList( this.StoreID,inCondition,inValue,ProductList.Actions.SPOILAGE );
if( pl.SelectDataRow != null )
{
this.SetDataToDataGridDetail( pl.SelectDataRow );
}
else
{
uncFunc.ShowInformation( "查找不到符合["+inValue+"]条件的商品" );
inTB.Focus();
inTB.SelectAll();
return;
}
}
/// <summary>
/// 打开选择商品列表
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cButton_Click( object sender,System.EventArgs e )
{
//判断是否已经选择出库仓库
if( this.StoreID.Equals("") )
{
uncFunc.ShowWarning( "请选择报损仓库!" );
this.TBStoreName.Focus();
return;
}
//打开商品列表窗口
ProductList pl = new ProductList( this.StoreID,ProductList.Actions.SPOILAGE );
pl.ShowDialog();
if( pl.SelectDataRow != null )
{
this.SetDataToDataGridDetail( pl.SelectDataRow );
}
else
{
return;
}
}
/// <summary>
/// 把获取的商品信息置入到DataGrid里
/// </summary>
/// <param name="inProductDR"></param>
private void SetDataToDataGridDetail( DataRow inProductDR )
{
int DGrow = this.DetailDataGrid.CurrentRowIndex;
DataRow myDataRow;
//检查商品是否重复
if( this.CheckRepeat( inProductDR,DGrow ) )
{
return;
}
if( DGrow > this.myUncDTs[1].Rows.Count - 1 )
{
myDataRow = this.myUncDTs[1].NewRow();
this.myUncDTs[1].Rows.Add( myDataRow );
myDataRow["a_Quantity"] = 0;
myDataRow["a_ID"] = uncFunc.getGUID();
myDataRow["a_SpoilageID"] = this.FID;
}
else
{
myDataRow = this.myUncDTs[1].Rows[DGrow];
}
myDataRow["p_BarCode"] = inProductDR["p_BarCode"];
myDataRow["p_Code"] = inProductDR["p_Code"];
myDataRow["p_NM"] = inProductDR["p_NM"];
myDataRow["a_ProductID"] = inProductDR["p_ID"];
myDataRow["p_FullName"] = inProductDR["p_FullName"];
myDataRow["a_BatchNo"] = inProductDR["a_BatchNo"];
myDataRow["p_Standard"] = inProductDR["p_Standard"];
myDataRow["p_UnitSale"] = inProductDR["p_UnitSale"];
myDataRow["a_Price"] = inProductDR["p_TradePrice"];
this.DetailDataGrid.CurrentCell = new DataGridCell( DGrow,8 );
}
/// <summary>
/// 检查要置入的商品信息是否重复
/// </summary>
/// <returns></returns>
private bool CheckRepeat( DataRow inProductDR,int CurrentRow )
{
string _ProID = inProductDR["p_ID"].ToString();
string _BatchNo = inProductDR["a_BatchNo"].ToString();
int i = 0;
foreach( DataRow dr in this.myUncDTs[1].Rows )
{
if( !dr.RowState.Equals( DataRowState.Deleted ) )
{
if( dr["ProductID"].Equals( _ProID ) &&
dr["BatchNo"].Equals( _BatchNo ) &&
i != CurrentRow )
{
uncFunc.ShowWarning( "商品["+dr["NM"].ToString()+"]同批号已经存在于明细表中!" );
return true;
}
i++;
}
}
return false;
}
这个好像是用C的编吧。
有VB.NET的吗?
这里有一个添加combobox到datagrid的实例,CheckBox也是一样的道理:
http://www.csdn.net/Develop/Read_Article.asp?Id=16434
不知道楼主是使用win还是使用web的,如果使用web很好实现
http://www.vbdotnetheaven.com/Code/Jul2003/2134.asp
<asp:TemplateColumn HeaderText="删除">
<ItemTemplate>
<asp:CheckBox id="CheckID" runat="server"></asp:CheckBox>
</ItemTemplate>
<HeaderStyle Width="6%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateColumn>
最好的办法:
Dim grdColStyle As New DataGridBoolColumn()
With grdColStyle
.HeaderText = "锁定"
.MappingName = "blLocked"
.Width = 70
End With
| 编程社区 2008 浙ICP备09013498号 |
| © TinyBBS.cn |
| 编程好站连接:codeproject sf.net codeplex |