Как я могу установить мой 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
Но есть и другой способ: вы можете изменить тип ячейки на метку или текстовый блок. Для этого вам необходимо изменить шаблоны сетки данных.