/// <summary>
/// 对dgSale控件的风格进行初始化
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
private DataGridTableStyle dtSaleStyle(DataTable dt)
{
DataGridTableStyle ts =new DataGridTableStyle();
DataGridTextBoxColumn  aColumnTextColumn ;
DataGridBoolColumn aColumnBoolColumn;

        
ts.AllowSorting=false;
ts.MappingName = dt.TableName; int numCols = dt.Columns.Count;
int i=0; while (i < numCols)    //重绘所有的列
{ if(i==10)
{
aColumnBoolColumn=new DataGridBoolColumn();
aColumnBoolColumn.AllowNull = false;
aColumnBoolColumn.MappingName = dt.Columns[i].ColumnName;
aColumnBoolColumn.HeaderText = dt.Rows[i][1].ToString();
aColumnBoolColumn.Width=int.Parse (dt.Rows[i][2].ToString());
aColumnBoolColumn.ReadOnly=false;
aColumnBoolColumn.TrueValue="1";
aColumnBoolColumn.FalseValue="0";
ts.GridColumnStyles.Add(aColumnBoolColumn);//'增加一种自定义的column风格
}
else
{
                                        ...... } i = (i + 1);
} return ts;
}
private void frmGoodsSale_Load(object sender, System.EventArgs e)
{
                   ......
dgSale.DataSource=dt;
dgSale.TableStyles.Clear();
dgSale.TableStyles.Add(dtSaleStyle(dt)); }
可是这样做以后,虽然第10列是check列,但是,仍然有几个问题?
1、窗体加载后,check列是灰显,我必须点击两次后,才可以真正选择,如何解决?
2、当我选择完后,一离开check列后,就恢复灰显而且不管我是否打勾,它都一样打勾状态灰显??
3、不管我是否打勾,我用dgSale[0,10].toString()读出的值都是空,为什么?
能解答,请详细说明?谢谢!!

解决方案 »

  1.   

    只用单击一次就改变的方法
    private void dataGrid1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    if(dataGrid1.DataSource == null)
    return;
    System.Windows.Forms.DataGrid.HitTestInfo htif =  dataGrid1.HitTest(e.X,e.Y);
    if(htif.Type != System.Windows.Forms.DataGrid.HitTestType.Cell)
    return;
    if(dataGrid1.CurrentCell.ColumnNumber != 10)
    return;
    DataView dv = (DataView)dataGrid1.DataSource;
    string checkvalue = dv[htif.Row][10].ToString();
    if(checkvalue.ToLower() == "false")
    dv[htif.Row][10] = "true";
    else
    dv[htif.Row][10] = "false";
    dv.Table.AcceptChanges();
    }
      

  2.   

    谢谢!还有最后一个问题,当是查询操作时,此列为只读,如下代码:
    if(addorupdate!=4)(4为查询)
    aColumnBoolColumn.ReadOnly=false;
    else
    aColumnBoolColumn.ReadOnly=true;
    可是,还是能点击此列,为什么?
      

  3.   

    只读只是表示不会改变对应的数据集里面的值,你可以在刚才的事件中添加
    if(dataGrid1.TableStyles[0].GridColumnStyles[10].ReadOnly == true)
         return;