Agarwal1984 Ответов: 2

Входной массив длиннее, чем количество столбцов в этой таблице. В приложении C# .NET windows.


Привет,

Я хочу, чтобы привязать мой все billno с начальным значением "--выберите--" но получаю ошибку с первоначальной стоимости с использованием C# .применение чистых окон.

"Ошибка:-
Input array is longer than the number of columns in this table.

Хо мы можем решить этот вопрос.
Пожалуйста, помогите мне.

заранее спасибо.

Анкит Агарвал
инженер-программист

Что я уже пробовал:

public DataTable GetAllBillNo()
       {
           DataTable dt = new DataTable();
           SqlCommand cmd = new SqlCommand("spGetAllBillNo", GetConnection());
           cmd.CommandType = CommandType.StoredProcedure;
           SqlDataAdapter sda = new SqlDataAdapter(cmd);
           sda.Fill(dt);
           DataRow dr;
           dr = dt.NewRow();
           dr.ItemArray = new object[] { 0, "--Select--" };//Error in this line.
           dt.Rows.InsertAt(dr, 0);
           return dt;
       }

       public void GetAllBillNo()
       {
           cmbBillNo.ValueMember = "OrderID";
           cmbBillNo.DisplayMember = "OrderID";
           cmbBillNo.DataSource = connClass.GetAllBillNo();
       }

2 Ответов

Рейтинг:
2

Karthik_Mahalingam

пробовать

sda.Fill(dt);
           DataRow dr;
           dr = dt.NewRow();
           dr["OrderID"] = "--Select--";
           dt.Rows.InsertAt(dr, 0);


Рейтинг:
1

OriginalGriff

Просто: посмотрите на сообщение об ошибке:

Input array is longer than the number of columns in this table.
Это довольно ясно.
Вы пытаетесь добавить два столбца данных в таблицу, которая имеет не более одного столбца. Поскольку система не знает, что делать с остальным, она выбрасывает его.

Используйте отладчик: поставьте точку останова на линию
dr.ItemArray = new object[] { 0, "--Select--" };
И посмотрите на dt внимательно. Сколько в нем колонок? Что это такое? Что в них содержится?

Возможно, вы звоните не тому SP, или он не возвращает то, что вы думаете, но я подозреваю, что "получить все номера счетов" вернет один столбец данных, сам.


Agarwal1984

Я называю правильный SP.
Только одна колонка в моем ДТ.
Только Orderid.

когда я не использую этот код:-
Строкаданных др;
др = ДТ.Невров();
д-р.ItemArray = new object[] { 0, " --Select--"}; / / ошибка в этой строке.
ДТ.Строк.InsertAt(dr, 0);
Итак, значение отображается в моем combobox, но я хочу, чтобы начальное значение находилось в позиции 0, например "--Select--"

DataTable возвращается в одном столбце:-
выберите код заказа из заказов (этот запрос написан на СП).

OriginalGriff

Один столбец = = одни данные. Вы пытаетесь добавить два элемента: ноль и строку. Правильно, система жалуется.

Вместо того чтобы создавать массив с двумя элементами, удалите ноль из массива и оставьте код InsertAt прежним.

Agarwal1984

Теперь он получает ошибку:-
Входная строка была не в правильном формате.Не удалось сохранить < -- Select-->В столбце OrderID. Ожидаемый тип-Int32.

Я изменил свой код:-

public DataTable GetAllBillNo()
{
DataTable dt = новый DataTable();
Команда sqlcommand cmd и = новая команда sqlcommand("spGetAllBillNo", метод getconnection());
УМК.CommandType = CommandType.Хранимая процедура;
SqlDataAdapter sda = новый SqlDataAdapter(cmd);
ПДД.Заполнить(ДТ);
Строкаданных др;
др = ДТ.Невров();
д-р.ItemArray = новый объект [] {"--Select--"};
ДТ.Строк.InsertAt(dr, 0);
возврат dt;
}

если я convert.int Итак, затем появляется еще одна ошибка: - входная строка была не в правильном формате.

OriginalGriff

Итак...у вас есть столбец, содержащий числа, и вы хотите поместить в него строку?
И эти сообщения об ошибках не те, которые вы ожидали?

Я не пытаюсь быть неловким здесь, но помните, что я понятия не имею, что такое ваши данные - я получаю только то, что вы печатаете для работы.

Если вы хотите смешивать типы, вам придется изменить то, что вы делаете: вы не можете "автоматизировать" процесс создания таблицы таким образом, потому что если вы предоставляете целые числа, он создает целочисленный столбец. Вместо этого преобразуйте ваши значения из SQL из целого числа в строку и добавьте "select" вверху. Затем создайте из него свою таблицу данных. Или создайте класс, который содержит целое число и переопределяет ToString для его отображения - и реализация ToString возвращает "Select" для отрицательного числа. Таким образом, ваши элементы могут оставаться в числовом порядке без необходимости в ведущих нулях.

Чем позже,тем лучше.

Agarwal1984

мое требование таково:-

--Выбирать--
1
2
3
4

я хочу заполнить combobox с помощью --Select-- но мои данные успешно заполнены без select.

OriginalGriff

Прочтите, что я сказал.