Как я могу установить мой Datagrid enabled = false и по-прежнему иметь полосу прокрутки без использования readonly()?

Меня попросили создать приложение, которое считывало бы штрих-коды и обновляло данные на экране, которое обновляло бы базу данных после сбора данных.

Проблема состоит в том, что существует столбец, который должен обновляться во время выполнения каждый раз, когда штрих-код будет считан, но пользователь не должен иметь возможность редактировать ячейку, записывая на клавиатуре устройства.

Поэтому я попытался установить мои столбцы только для чтения, но когда я это сделал, невозможно обновить значение в datatable, затем я попытался установить DataGrid enabled = false, но затем полоса прокрутки перестала работать, и мне это нужно, потому что Это небольшое устройство, и есть другие столбцы, которые пользователь должен видеть.

Есть ли простой способ решить эту проблему? Я использую.net compact 3.5

Это мой код для кнопки, которая загружает DataGrid:

DataTable tabela    = new DataTable();
DataTable codbarras = new DataTable();

private void button1_Click(object sender, EventArgs e)
{
    ultimopedido = textBox1.Text;
    try
    {
        FbDataReader leitor;
        FbDataReader leitorbarras;
        string query1 = "SELECT CAST(0 AS DOUBLE PRECISION)SEPARADO, CAST(ITEMORCAMENTO.SALDOITEMORCA - ITEMORCAMENTO.QUANTITEMSEPARADO AS DOUBLE PRECISION)SALDO, ITEMORCAMENTO.QUANTITEMSEPARADO, ITEMORCAMENTO.SALDOITEMORCA, PRODUTO.PRODUTOID, PRODUTO.REFPROD, PRODUTO.NOMEPROD, PRODUTO.ESTOQUEPED, ITEMORCAMENTO.QUANTITEMORCA, ITEMORCAMENTO.ITEMORCAMENTOID, ORCAMENTO.STATUSORCA";
        query1 += " FROM ORCAMENTO ";
        query1 += " LEFT JOIN ITEMORCAMENTO ";
        query1 += " ON ORCAMENTO.ORCAMENTOID = ITEMORCAMENTO.ORCAMENTOID ";
        query1 += " INNER JOIN PRODUTO ";
        query1 += " ON ITEMORCAMENTO.PRODUTOID = PRODUTO.PRODUTOID ";
        query1 += " WHERE ORCAMENTO.ORCAMENTOID = " + textBox1.Text + " AND ";
        query1 += " ORCAMENTO.STATUSORCA = 4 AND ";
        query1 += " ORCAMENTO.SEPARADO = 0 AND ";
        query1 += " ITEMORCAMENTO.STATUSITEMORCA IN (0,1) ";
        query1 += " ORDER BY PRODUTO.PRODUTOID";
        string queryUp = "UPDATE ORCAMENTO SET SEPARADO = 1 WHERE ORCAMENTOID =" + textBox1.Text;


        leitor = conexao.Executar(Conexao.FbConexao, query1);
        tabela.Load(leitor);
        if (tabela.Rows.Count > 0)
        {
            conexao.Atualizar(Conexao.FbConexao, queryUp);
            dataGrid1.DataSource = tabela;
            DataGridTableStyle ts               = new DataGridTableStyle();
            DataGridColumnStyle celId           = new DataGridTextBoxColumn();
            DataGridColumnStyle celQuantitem    = new DataGridTextBoxColumn();
            DataGridColumnStyle celSaldo        = new DataGridTextBoxColumn();
            DataGridColumnStyle celRef          = new DataGridTextBoxColumn();
            ts.MappingName = tabela.TableName;
            celId.MappingName           = "PRODUTOID";
            celId.HeaderText            = "Id";
            celQuantitem.MappingName    = "SEPARADO";
            celQuantitem.HeaderText     = "Separado";
            celSaldo.MappingName        = "SALDO";
            celSaldo.HeaderText         = "Saldo";
            celRef.MappingName          = "REFPROD";
            celRef.HeaderText           = "Referência";
            celId.Width = 50;
            celQuantitem.Width = 75;
            celSaldo.Width = 50;
            celRef.Width = 75;
            ts.GridColumnStyles.Add(celId);
            ts.GridColumnStyles.Add(celQuantitem);
            ts.GridColumnStyles.Add(celSaldo);
            ts.GridColumnStyles.Add(celRef);
            dataGrid1.TableStyles.Add(ts);

            tabela.Columns["SEPARADO"].ReadOnly = true;

            textBox1.Enabled    = false;
            button1.Enabled     = false;
            textBox2.Enabled    = true;
            button6.Enabled     = true;
            button2.Enabled     = true;
            button3.Enabled     = true;
            button4.Enabled     = true;
            button5.Enabled     = true;
        }
        else
        {
            MessageBox.Show("Não foram encontrados dados disponíveis");
        }

        string query2 = "SELECT B.CODBARRAS, B.PRODUTOID, B.ITEMORCAMENTOID" +
                        " FROM ITEMORCAMENTO A" +
                        " INNER JOIN CODBARRASPRODUTO B" +
                        " ON A.PRODUTOID = B.PRODUTOID" +
                        " WHERE B.ITEMORCAMENTOID = 0 AND" +
                        " A.ORCAMENTOID = " + textBox1.Text + "AND " +
                        " B.ITEMORCAMENTOID = 0";
        leitorbarras = conexao.Executar(Conexao.FbConexao, query2);
        codbarras.Load(leitorbarras);
    }
    catch (Exception E)
    {
        MessageBox.Show(E.Message);
    }
}

1 ответ

Я думаю, что только для чтения коллекция может работать для вас. http://msdn.microsoft.com/en-us/library/ms132474(v=vs.110).aspx

Но есть и другой способ: вы можете изменить тип ячейки на метку или текстовый блок. Для этого вам необходимо изменить шаблоны сетки данных.

Другие вопросы по тегам