Привязка данных в поле со списком - PullRequest
0 голосов
/ 02 июня 2010

У меня есть две формы и класс, запросы возвращаются в хранимой процедуре.

-- Stored Procedure:

ALTER PROCEDURE [dbo].[Payment_Join]
    @reference nvarchar(20)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT p.iPaymentID
            , p.nvReference
            , pt.nvPaymentType
            , p.iAmount
            , m.nvMethod
            , u.nvUsers
            , p.tUpdateTime
        FROM Payment p
            , tblPaymentType pt
            , tblPaymentMethod m
            , tblUsers u
        WHERE p.nvReference = @reference
            and p.iPaymentTypeID = pt.iPaymentTypeID
            and p.iMethodID = m.iMethodID
            and p.iUsersID = u.iUsersID 
END

// payment.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

namespace Finance {

class payment {

    string connection = global::Finance.Properties.Settings.Default.PaymentConnectionString;

    #region Fields

    int _paymentid = 0;
    string _reference = string.Empty;
    string  _paymenttype;
    double _amount = 0;
    string _paymentmethod;
    string _employeename;
    DateTime _updatetime = DateTime.Now;

    #endregion

    #region Properties

    public int paymentid
    {
        get { return _paymentid; }
        set { _paymentid = value; }
    }
    public string reference
    {
        get { return _reference; }
        set { _reference = value; }

    }
    public string paymenttype
    {
        get { return _paymenttype; }
        set { _paymenttype = value; }
    }
    public string paymentmethod
    {
        get { return _paymentmethod; }
        set { _paymentmethod = value; }
    }
    public double amount
    {
        get { return _amount;}
        set { _amount = value; }
    }
    public string employeename
    {
        get { return _employeename; }
        set { _employeename = value; }
    }
    public DateTime updatetime
    {
        get { return _updatetime; }
        set { _updatetime = value; }
    }
    #endregion

    #region Constructor 

    public payment()
    {
    }

    public payment(string refer)
    {
        reference = refer;

    }
    public payment(int paymentID, string Reference, string Paymenttype, double Amount, string Paymentmethod, string Employeename, DateTime Time)
    {
        paymentid = paymentID;
        reference = Reference;
        paymenttype = Paymenttype;
        amount = Amount;
        paymentmethod = Paymentmethod;
        employeename = Employeename;
        updatetime = Time;

    }
    #endregion



    #region Methods

    public void Save()
    {
        try
        {
            SqlConnection connect = new SqlConnection(connection);
            SqlCommand command = new SqlCommand("payment_create", connect);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add(new SqlParameter("@reference", reference));
            command.Parameters.Add(new SqlParameter("@paymenttype", paymenttype));
            command.Parameters.Add(new SqlParameter("@amount", amount));
            command.Parameters.Add(new SqlParameter("@paymentmethod", paymentmethod));
            command.Parameters.Add(new SqlParameter("@employeename", employeename));
            command.Parameters.Add(new SqlParameter("@updatetime", updatetime));
            connect.Open();
            command.ExecuteScalar();
            connect.Close();

        }
        catch
        {

        }
    }

    public void Load(string reference)
    {
        try
        {


            SqlConnection connect = new SqlConnection(connection);
            SqlCommand command = new SqlCommand("Payment_Join", connect);
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.Add(new SqlParameter("@Reference", reference));

            //MessageBox.Show("ref = " + reference);

            connect.Open();
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {



                this.reference = Convert.ToString(reader["nvReference"]);
                // MessageBox.Show(reference);
                // MessageBox.Show("here");

                // MessageBox.Show("payment type id = " + reader["nvPaymentType"]);

                // MessageBox.Show("here1");


                this.paymenttype = Convert.ToString(reader["nvPaymentType"]);

                // MessageBox.Show(paymenttype.ToString());
                this.amount = Convert.ToDouble(reader["iAmount"]);
                this.paymentmethod = Convert.ToString(reader["nvMethod"]);
                this.employeename = Convert.ToString(reader["nvUsers"]);
                this.updatetime = Convert.ToDateTime(reader["tUpdateTime"]);


            }
            reader.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Check it again" + ex);
        }
    }

    #endregion

}
}

Я уже связал элементы со списком через дизайнера, Когда я запускаю приложение, я просто получаю ссылку, заполненную в форме 2, и поле со списком просто заполняется, а не конкретным значением, которое выбирается. Новое в c #, помогите мне познакомиться

Ответы [ 2 ]

2 голосов
/ 02 июня 2010

В предположении WinForms ...

Элемент управления ComboBox имеет три свойства, которые должны использоваться при использовании DataBinding .

  1. DataSource ;
  2. DisplayMember ;
  3. ValueMember .

DataSource

Источником данных может быть база данных, веб-служба или объект, который впоследствии можно использовать для создания элементов управления с привязкой к данным. Когда свойство DataSource установлено, коллекцию элементов нельзя изменить.

DisplayMember

Элементы управления, наследуемые от ListControl, могут отображать различные типы объектов. Если указанное свойство не существует в объекте или значение DisplayMember является пустой строкой (""), вместо этого отображаются результаты метода ToString объекта.

Если новый элемент отображения не может быть установлен, сохраняется предыдущая настройка элемента отображения.

ValueMember

Укажите содержимое свойства ValueMember в случаях, когда вы связываете данные.

Вы можете очистить свойство ValueMember, установив для свойства пустую строку ("") или пустую ссылку (ничего в Visual Basic).

Установка нового свойства ValueMember вызывает события ValueMemberChanged и SelectedValueChanged.

Теперь результат вашей хранимой процедуры должен храниться в памяти в IList, BindingList<T> или любой другой привязываемой коллекции.

Эта коллекция должна быть установлена ​​как DataSource вашего ComboBox. На мой взгляд, лучший подход - через BindingSource.

Вот пример:

public partial class Form1 : Form {
    private BindingSource bindingSource1;

    public Form1() {
        InitializeComponent();
        bindingSource1 = new BindingSource();
        comboBox1.DataSource = bindingSource1;
        comboBox1.DisplayMember = "PaymentMethod";
        comboBox1.ValueMember = "PaymentId";
        bindingSource1.DataSource = GetPayments(); // GetPayments() shall return one of the above-mentioned bindable collections of payments.
    }
}
0 голосов
/ 02 июня 2010

Проверьте, поможет ли вам .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...