Как вы выполняете базовый CRUD для базы данных, используя формы Windows? - PullRequest
0 голосов
/ 30 августа 2011

Я широко использовал .Net Framework для внутренних процессов и веб-страниц, но мне никогда не приходилось использовать Windows Forms.Единственный опыт, который у меня есть с технологией типа формы Windows, - это Delphi 6 и 7.

Я искал учебник, так как он кажется слишком базовым для того, что я ищу.Или это кажется неуместным для того, что я пытаюсь сделать.

Я хотел бы иметь отображение сетки (для этого я использовал DataGridView) на форме (что мне удалось сделать), чтобы пользователь могможно просматривать, фильтровать и искать данные.Другие вещи, такие как нумерация страниц, также могут быть вовлечены, но я думаю, что могу решить, как сделать это для себя.

Все примеры, с которыми я сталкиваюсь, используют DataGridView для редактирования, добавления и удаления.Мне не очень нравится идея, что пользователь использует сетку для всего.Это сбивает с толку и может быть весьма подвержено ошибкам.

Я хотел бы иметь кнопки для добавления, редактирования и удаления различных типов данных.Так, например, если бы у меня была Форма для управления клиентами, я бы хотел иметь возможность выбрать строку для редактирования и нажать кнопку.Это должно открыть новую форму окна со всеми данными, предварительно загруженными в текстовые поля, переключатели, флажки и выпадающие списки и т. Д.

Если они нажмут кнопку добавить, они перейдут на тот же экран, что и редактирование, за исключением всей информациипустой.Если они выбирают строку и нажимают кнопку «Удалить», она удаляет этого клиента и удаляет его из DataGridView.

При использовании некоторых элементов управления и опций привязки данных, которые я пробовал, кажется, получается ВСЕ строки из таблицы.Как бы я мог получить интересующую меня строку из базы данных?Я не уверен, что лучшие практики здесь.

Я страдаю от информационной перегрузки прямо сейчас и просто был бы признателен, если бы кто-то указал мне правильное направление.ожидая, что вы сможете настроить что-то вроде запроса или SqlCommand (перетаскивание в графическом интерфейсе) и установить его свойство SQL, возможно, немного параметризировать SQL.Перетащите источник данных на форму.Укажите источник данных на SqlQuery / SqlCommand и нажмите активировать в команде.Теперь я могу перетаскивать компоненты на форму и устанавливать их свойства источника данных и поле, к которому они относятся.

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Взгляните на этот образец . Он показывает базовую привязку ADO.NET к элементам управления WinForm (не только к DataGridView).

1 голос
/ 30 августа 2011

Вы можете сделать это разными способами.И есть множество рамок, чтобы помочь.Entity Framework, NHiberbnate.

, но на низком уровне вы можете использовать объекты, связанные с базой данных.SqlConnection, SqlCommand, DataReader.Ниже приведен пример, связанный с SQL-сервером для загрузки строк.

private IList<IPosition> PositionsLoad(SqlConnection connection, PositionsRequest request)
{

    SqlCommand cmd = new SqlCommand();
    cmd.Connection = connection;
    cmd.CommandText = "select * from mytable WHERE x ";
    cmd.CommandType = CommandType.Text;

    //Get the reader
    SqlDataReader reader = cmd.ExecuteReader;
    IList<IPosition> ret = new List<IPosition>();

    if (reader.HasRows()) {
        //Create our converter to convert DataReader into a business object/s
        DataReaderToPosition readerConvert = new DataReaderToPosition();
        //loop rows
        while (reader.Read) {
            IPosition pos = readerConvert.DataReaderToBusinessObject(reader);
            ret.Add(pos);
        }
    }

    reader.Close();
    return ret;

}

с использованием устройства чтения данных:

Public Overrides Function DataReaderToBusinessObject(ByVal reader As System.Data.IDataReader) As IPosition

    Dim res As IPosition = New Position

    res.ItemDate = reader.GetDateTime(reader.GetOrdinal("Date"))
    res.Strategy = reader.GetString(reader.GetOrdinal("Strategy"))
    res.SubStrategy = reader.GetString(reader.GetOrdinal("SubStrategy"))
    res.BrokerPrime = reader.GetString(reader.GetOrdinal("BrokerPrime"))
    res.BrokerExecuting = reader.GetString(reader.GetOrdinal("BrokerExecuting"))
    res.AccountName = reader.GetString(reader.GetOrdinal("AccountName"))
    res.ExpectedLoss = reader.GetDouble(reader.GetOrdinal("Expected_Loss"))
    res.RiskNotional = reader.GetDouble(reader.GetOrdinal("Risk_Notional"))
    res.ModelDelta = reader.GetDouble(reader.GetOrdinal("Model_Delta"))
    res.ExpectedTrancheLoss = reader.GetDouble(reader.GetOrdinal("Expected_Tranche_Loss"))
    res.BaseCorrelation = reader.GetDouble(reader.GetOrdinal("Base_Correlation"))
    res.LossOnSingleNameDefault = reader.GetDouble(reader.GetOrdinal("Loss_on_Single_Name_Default"))
    res.RiskCapitalAllocation = reader.GetDouble(reader.GetOrdinal("Risk_Capital_Allocation"))
    res.MarginFundingAllocation = reader.GetDouble(reader.GetOrdinal("Margin_Funding_Allocation"))
    res.DataSource = reader.GetString(reader.GetOrdinal("DataSource"))

    Return res
End Function
...