编程社区 » vb.net编程 » 高分求教:问在DataGrid中如何添加一列CheckBox

高分求教:问在DataGrid中如何添加一列CheckBox


fool_chen



 发表:

高分求教:问在DataGrid中如何添加一列CheckBox


最好有代码可参考
谢谢各位。


yyj135
回复:

我的思路是:1.先给表增加一个临时字段(设为布尔值)
2.重新加载表格
不知是否有用.

brightheroes
回复:

/// <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 );
}

brightheroes
回复:

/// <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;
}

fool_chen
回复:

这个好像是用C的编吧。
有VB.NET的吗?

Vsnetlx
回复:

这里有一个添加combobox到datagrid的实例,CheckBox也是一样的道理:
http://www.csdn.net/Develop/Read_Article.asp?Id=16434

menuvb
回复:

不知道楼主是使用win还是使用web的,如果使用web很好实现

dahuzizyd
回复:

http://www.vbdotnetheaven.com/Code/Jul2003/2134.asp

gOODiDEA
回复:

<asp:TemplateColumn HeaderText="删除">
<ItemTemplate>
<asp:CheckBox id="CheckID" runat="server"></asp:CheckBox>
</ItemTemplate>
<HeaderStyle Width="6%"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateColumn>

xsjtc
回复:

最好的办法:

Dim grdColStyle As New DataGridBoolColumn()
With grdColStyle
.HeaderText = "锁定"
.MappingName = "blLocked"
.Width = 70
End With


相关文章
VB.NET和SQL编译安装问题。在线高分等待。
有关金额大小写的转换?
那位大哥大姐有vb.net+sql的实例可供小弟参考一下
不知是否是.net的bug--关于串口控件和msgbox冲突的问题
很简单的问题?有关textbox的
如何将excel里的数据传到dataset中,要考虑excel有多个表的情况
vb.net中怎样将datagrid中显示的数据直接打印出来???
请问如何将DataTable中一个DataRow的状态设为已删除?
请问在VB中如何制作一个带有农历又有阳历的控件
能不能将dataset 在 function 中return?? 我没分给了,还请帮帮我!!谢谢
请问转VB.net好转吗及书籍介绍.
VS.net 2003的问题
热门文章
vb.net webbrowser 控件 如何编程序点击 网页中的 超级链接 <a href="">
如何判断一个excel文件是否处于打开状态呢?[用vb代码]
提示“未定义类型Excel.Application”需要引入哪个命名空间吗?还是其他问题?
Push模式的水晶报表怎么无法显示数据?着急啊,在线等!!!
怎么把数值字符串赋值给数组
问个弱问题,如何使用API SendInput或者sendmessage来模拟键盘,大侠一会就能搞定
大型.NET OA源码 VB.NET+SQL SERVER
webclient中提交url时的编码问题(100分+在线等)
vc.net 里怎么定义全局变量啊?我想定义一个全局类实例对象!
vb.net中引用自定义类中的方法时,怎样才能做到自动显示类方法以及参数的中文提示?
熟悉VB转换到VB.net的大侠们,请帮我一下这样的该怎么转换
请问关于FolderBrowserDialog的使用

编程社区 2008 浙ICP备09013498号
© TinyBBS.cn
编程好站连接:codeproject sf.net codeplex