【问题标题】:Readonly datagrid columns with sql带有 sql 的只读数据网格列
【发布时间】:2020-04-04 14:34:52
【问题描述】:

我有一个带有 mysql 数据和复选框列的数据网格

这里是代码

    MySqlCommand cmd = m.getmodel("select * from " + equip + " where stored=" + type);
    MySqlDataAdapter dataAdapter = new MySqlDataAdapter(cmd);
    DataTable data = new DataTable(equip);
    dataAdapter.Fill(data);
    var checkBoxColumn = new DataColumn("Select", typeof(bool));
    data.Columns.Add(checkBoxColumn);

    checkBoxColumn.SetOrdinal(0); // Move column to the beginning
    foreach (DataRow row in data.Rows)
    {
        row["Select"] = false;

    }

    data2.ItemsSource = data.DefaultView;
    checkBoxColumn.ReadOnly = false;

XAML

   <DataGrid Margin="736,166,10,130"
                  Grid.Column="4"
                  Grid.Row="4"
                  IsReadOnly="true"
                  CanUserAddRows="false"
                  x:Name="data2"
                  SelectionChanged="DataGrid_SelectionChanged" />

现在我只需要第一列是可编辑的,以允许用户使用复选框,请参见图片

我需要限制对除复选框列之外的其余数据的编辑 我在 xaml 中尝试过 Readonly,但它甚至在第一列中也限制了编辑 我不知道如何在使用 mysqlcommand 时手动添加行

【问题讨论】:

  • 您可以通过编程方式添加限制。首先在你的 xml 中删除 IsReadOnly="true" 然后 foreach data2.Columns as col, col.ReadOnly = true except col.Name == "Select"
  • @TấnNguyên 你能写出完整的代码吗?我试过这个,但它给了我错误
  • 我发布了我的代码

标签: c# wpf visual-studio datagridview


【解决方案1】:

我会在您的代码行 data2.ItemsSource = data.DefaultView; 之前开始。请记住,您已经在 DataGrid XAML 中删除了 IsReadOnly="true"

简单的只读设置

        foreach (DataColumn col in data.Columns)
        {
            if (col.ColumnName == "Select")
                col.ReadOnly = false;
            else
                col.ReadOnly = true;
        }

        dataGrid.ItemsSource = data.DefaultView;

【讨论】:

    猜你喜欢
    • 2015-11-19
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-11
    相关资源
    最近更新 更多