srihari1904 Ответов: 1

Ссылка на объект не установлена на экземпляр ошибки объекта в winform devexpress ?


Привет,
У меня есть Gridview в моей форме, если я нажму кнопку на Gridview, я получу значение столбца сфокусированной строки и попытаюсь использовать это значение в следующей форме. Но в этой новой форме ошибка показана следующим образом
public partial class New_Invoice : DevExpress.XtraEditors.XtraForm
   {

       string getOper = "A";

       public New_Invoice()
       {
           InitializeComponent();
       }

       public New_Invoice(string oper, int invoiceno)
       {
           // TODO: Complete member initialization

           textEdit5.Text = invoiceno.ToString(); // error shown in this line
           textEdit5.Visible = false;
           getOper = oper;
       }

Что не так в моем коде ?

Thomas ktg

Что такое invoiceno? Приносит ли он какое-либо значение или просто дает нулевое значение? И это тоже проверь.

srihari1904

он приносит значение из предыдущей формы <pre lang="c#">private void repositoryItemButtonEdit1_Buttonclick(object sender, DevExpress.XtraEditors.Управления.ButtonPressedEventArgs е)
{
строка oper = "A";

New_Invoice ФРМ = новый New_Invoice(опер, конвертировать.ToInt32(gridView1.GetFocusedRowCellValue("invoive_number")));
ФРМ.Показать();
управления gridview1.RefreshData();
}</pre>

1 Ответов

Рейтинг:
12

OriginalGriff

Вы еще не сконструировали систему управления!
Либо вызовите InitializeComponent внутри всех ваших конструкторов, либо обратитесь к конструктору по умолчанию, который имеет его первым, используя цепочку построения:

public partial class New_Invoice : DevExpress.XtraEditors.XtraForm
    {

        string getOper = "A";

        public New_Invoice()
        {
            InitializeComponent();
        }

        public New_Invoice(string oper, int invoiceno) : this()
        {
            // TODO: Complete member initialization

            textEdit5.Text = invoiceno.ToString(); 
            textEdit5.Visible = false;
            getOper = oper;
        }


srihari1904

Привет OriginalGriff,
Теперь я изменил ошибку не показанную но она показала форму с пустыми полями означает что она не будет принимать значение столбца я так думаю ?

OriginalGriff

Покажите фактический код, который вы используете!

srihari1904

частная repositoryItemButtonEdit1_Buttonclick недействительным(объект отправителя, частое.XtraEditors.Управления.ButtonPressedEventArgs е)
{
строка oper = "A";

New_Invoice ФРМ = новый New_Invoice(опер, конвертировать.ToInt32(gridView1.GetFocusedRowCellValue("invoice_number")));
ФРМ.Показать();
управления gridview1.RefreshData();
}
этот код в форме 1 и этот код в форме 2

публичный частичный класс New_Invoice : DevExpress.XtraEditors.XtraForm
{

строка getOper = "A";



общественные New_Invoice()
{
метод InitializeComponent();
}

общественные New_Invoice(строка опере, инт invoive_number)
: этот()
{
// TODO: полная инициализация элемента
//this.oper = опер;
//это.р = р;
textEdit5.Текст = invoive_number.Метод toString();
textEdit5.Видна = ложь;
getOper = опер;
}
частная New_Invoice_Load недействительным(объект отправителя, EventArgs в электронной)
{
Метод oledbconnection кон = новый объект oledbconnection("поставщик=Майкрософт.Туз.Oledb для.12.0;Источник Данных=Д:/Srihari/OrionSystem.# то # ");

int i = преобразовать.ToInt32(textEdit5.Text);

Объект oledbcommand да = новый объект oledbcommand("Select * из invoice_top где invoice_number='" + я + "' ", кон);
против.Открыть();
OleDbDataReader reader = da.ExecuteReader(); // теперь ошибка отображается как "несоответствие типов данных"
в то время как (читатель.читать())
{

textEdit12.Text = читатель.GetString(1);
textEdit13.Text = читатель.GetString(2);
textEdit4.Текст = читатель.GetString(3);

textEdit1.Текст = читатель.GetString(5);
textEdit2.Текст = читатель.GetString(6);
textEdit3.Текст = читатель.GetString(7);


}

против.Закрывать();
}

OriginalGriff

Ну, я не так уж удивлен, что вы получаете "несоответствие типов данных" - попробуйте вместо этого:
Метод oledbconnection кон = новый объект oledbconnection("поставщик=Майкрософт.Туз.Oledb для.12.0;Источник Данных=Д:/Srihari/OrionSystem.# то # ");

int i = преобразовать.ToInt32(textEdit5.Text);

OleDbCommand da = new OleDbCommand("SELECT * FROM invoice_top WHERE invoice_number=@IN, con);
да, параметры.AddWithValue("@IN", i);
против.Открыть();
И oledbdatareader читатель = да.Метода executereader();
И (предполагая, что ваш столбец invoice_number является целым числом) это должно сработать - это плохая идея объединять строки для формирования SQL-команд, это оставляет вас открытыми для атак SQL-инъекций. Всегда используйте параметризованные запросы.