Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > DataGridView


Автор: staim 14.11.2013, 12:10
Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        IDataAdapter _adapter;
        DataSet _dataset;
        IDbConnection _conn;
        

        public Form1()
        {
            InitializeComponent();
            button1.Enabled = false;
            CreateDataSet();
            dataGridView1.CellEndEdit +=new DataGridViewCellEventHandler(OnCellEdit);
        }
        protected override void OnClosing(CancelEventArgs e)
        {
            _dataset.Dispose();
            _conn.Dispose();
        }

        private void CreateDataSet()
        {
            string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Project\db1.mdb";
            OleDbConnection conn = new OleDbConnection(connectionString);
            OleDbCommand selectCmd = new OleDbCommand("SELECT * FROM Логины", conn);
            OleDbCommand updateCmd =
                new OleDbCommand("UPDATE Логины SET Логин = @login, Пароль = @password, Правило = @rule WHERE Id=@Id", conn);
            updateCmd.Parameters.Add("@login", OleDbType.VarChar, 50, "Логин");
            updateCmd.Parameters.Add("@password", OleDbType.VarChar, 50, "Пароль");
            updateCmd.Parameters.Add("@rule",OleDbType.VarChar, 1,"Правило");
            updateCmd.Parameters.Add("@Id", OleDbType.Integer, 4, "Id");

            OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.TableMappings.Add("Table", "Логины");
            adapter.SelectCommand = selectCmd;
            adapter.UpdateCommand = updateCmd;
            _conn = conn;
            _adapter = adapter;
            //_dataset = new DataSet("Логины");
            DataTable dt = new DataTable("Логины");
            DataColumn dc = new DataColumn("id", typeof(int));
            DataColumn dc2 = new DataColumn("login", typeof(string));
            DataColumn dc3 = new DataColumn("pass", typeof(string));
            DataColumn dc4 = new DataColumn("rule", typeof(string));
            dt.Columns.Add(dc);
            dt.Columns.Add(dc2);
            dt.Columns.Add(dc3);
            dt.Columns.Add(dc4);
            _dataset = new DataSet("Логины");
            _dataset.Tables.Add(dt);

            _adapter.Fill(_dataset);
            dataGridView1.DataSource = _dataset.Tables["Логины"];
        }

        private void OnCellEdit(object sender, DataGridViewCellEventArgs e)
        {
            button1.Enabled = true;
        }


        private void button2_Click(object sender, EventArgs e)
        {
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            _adapter.Update(_dataset);
            button1.Enabled = false;
        }


    }
}


Должна выводиться таблица id, login, password, rule с возможностью редактирования. выводится id, login, password, rule пустые и id, login, password, rule из базы данных, появляется в общем 8 колонок. Как поправить этот момент? и еще как сделать последнюю колонку ListBox ом ? помогите пож-та срочно товарищи. С меня + если он ставится тут

Автор: jonie 14.11.2013, 23:29
создавайте пустой DataSet и заполняйте (Fill) его (не создавая руками таблицу и колонки в ней).

Автор: dzaraev 15.11.2013, 06:05
Цитата(staim @  14.11.2013,  12:10 Найти цитируемый пост)
выводится id, login, password, rule пустые и id, login, password, rule из базы данных, появляется в общем 8 колонок

Установите свойство DataGridView.AutoGenerateColumns на FALSE. Возможно дело в этом.
Цитата(staim @  14.11.2013,  12:10 Найти цитируемый пост)
еще как сделать последнюю колонку ListBox

Если использовать для геренации колонок свойство DataGridView.DataSource, но скорее всего никак (не уверен на 100%).
А если создавать колонки вручную, то взгляните на  класс DataGridViewColumn и его наследников:
http://msdn.microsoft.com/ru-ru/library/system.windows.forms.datagridviewcolumn(v=vs.100).aspx
тут есть DataGridViewTextBoxColumn например. Если вам нужно именно листбокс - создайте своего наследника от класса DataGridViewColumn и реализуйте в нем нужную фичу. Если будете реализовывать свою колонку, по ссылке выше прочитайте обязательно раздел "Заметки".

Автор: staim 15.11.2013, 06:41
Спасибо попробую

Автор: staim 15.11.2013, 07:06
Цитата(dzaraev @ 15.11.2013,  06:05)
Цитата(staim @  14.11.2013,  12:10 Найти цитируемый пост)
выводится id, login, password, rule пустые и id, login, password, rule из базы данных, появляется в общем 8 колонок

Установите свойство DataGridView.AutoGenerateColumns на FALSE. Возможно дело в этом.
Цитата(staim @  14.11.2013,  12:10 Найти цитируемый пост)
еще как сделать последнюю колонку ListBox

Если использовать для геренации колонок свойство DataGridView.DataSource, но скорее всего никак (не уверен на 100%).
А если создавать колонки вручную, то взгляните на  класс DataGridViewColumn и его наследников:
http://msdn.microsoft.com/ru-ru/library/system.windows.forms.datagridviewcolumn(v=vs.100).aspx
тут есть DataGridViewTextBoxColumn например. Если вам нужно именно листбокс - создайте своего наследника от класса DataGridViewColumn и реализуйте в нем нужную фичу. Если будете реализовывать свою колонку, по ссылке выше прочитайте обязательно раздел "Заметки".

а я видел классы вроде datagridviewcomboboxcolumn например, он не сгодится ? т.е. нужно наследовать свой класс верно?

Автор: dzaraev 15.11.2013, 10:09
Цитата(staim @  15.11.2013,  07:06 Найти цитируемый пост)
а я видел классы вроде datagridviewcomboboxcolumn например, он не сгодится ? т.е. нужно наследовать свой класс верно?

Если вас этот класс устроит, используйте его конечно. Свой надо  делать только если нет стандартного класса для ваших целей. Вам виднее - сгодится комбобокс вместо листа или нет, я ведь вашей задачи не знаю ))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)