2

开发人员您好,我正在使用 VS 2010。我有一个 dev express 网格,其中有一个复选框列。问题是当我选中复选框时,它会被选中,但是当我移动到任何其他单元格或列时,复选框会自动取消选中。直到现在我的代码如下

 if (e.Column.ToString()=="Active" )
            {

                RepositoryItemCheckEdit edit = UserInfoGridView.GridControl.RepositoryItems.Add("CheckEdit") as RepositoryItemCheckEdit;


                column = e.Column;
                column.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.False;
                column.Visible = true;
                column.VisibleIndex = 3;
                column.FieldName = "CheckMarkSelection";
                column.Caption = "Active";
                column.OptionsColumn.ShowCaption = true;
                column.OptionsColumn.AllowEdit = true;
                column.OptionsColumn.AllowSize = false;


                column.UnboundType = DevExpress.Data.UnboundColumnType.Boolean;

                column.ColumnEdit = edit;

            }
4

5 回答 5

4

好吧,我找到了答案…………我所做的是

   public frmLoad()
    {


        InitializeComponent();


        string DisplayQuery = "Select * from TableName";
         MasterDs = SqlHelper.ExecuteDataset(CommonClass.ConnectionString, CommandType.Text, DisplayQuery);
        MasterDs.Tables[0].Columns.Add("FLAG", typeof(string));

        MainGrid.DataSource = MasterDs.Tables[0];
        gridview.PopulateColumns();

        gridview.Columns["ID"].VisibleIndex = -1;
        gridview.Columns["FLAG"].VisibleIndex = -1;

        DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit selectnew = new DevExpress.XtraEditors.Repository.RepositoryItemCheckEdit();
        gridview.Columns["ColName"].ColumnEdit = selectnew;
        selectnew.NullText = "";
        selectnew.ValueChecked = "Y";
        selectnew.ValueUnchecked = "N";
        selectnew.ValueGrayed = "-";

    }
于 2012-07-27T11:19:59.480 回答
0

这可能是因为在检查取消选中操作后未修改绑定网格的数据源。您是否处理CellValueChanged视图事件以更改 darasource 对象的属性值?

private void gridView1_CellValueChanged(object sender, CellValueChangedEventArgs e)
        {
            if (e.Column.Name != "Active")
                return;

            var person = gridView1.GetFocusedRow() as Person;
            person.Active = Convert.ToBoolean(e.Value);
        }

或者,如果您使用 DataSet 作为网格的数据源:

var id = gridView1.GetFocusedRowCellValue("IdColumnName");
var active = gridView1.GetFocusedRowCellValue("ActiveColumnName");

NorthwindDataSet.PersonsRow PersonsRow = 
    northwindDataSet1.Persons.FindByPersonID(id);

PersonsRow.ACTIVE= Convert.ToBoolean(active);

PS:未测试

于 2012-07-26T12:21:04.120 回答
0

试试这样的
字符串 DisplayQuery = "declare @Active bit; set @Active=0; select @Active as Active, * from TableName";

于 2014-05-22T07:19:13.697 回答
0

该问题可能是由列的不正确基础类型引起的:它应该是bool开箱即用的。

要设置类型,您可以尝试以下操作:

MasterDs.Tables[0].Columns[0].DataType = typeof(bool);
于 2015-03-17T13:35:16.743 回答
0

我使用 Entity Framework 6.1 作为 ObjectContext 的后端。我已经将数据库类型设置为 tinyint,当实体框架更新类时它映射到字节。

将数据库类型更改为位并刷新实体对象会创建正确的布尔类型,之后复选框会正确显示在 DevExpress Winforms 中。

于 2015-09-27T01:50:54.110 回答