Member 13650918 Ответов: 2

Как решить входной массив длиннее количества столбцов


      protected void Add_Click(object sender, EventArgs e)
{
    GridView1.Visible = true;
    //createnewrow();
    ds.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text);

    TextBox1.Text = "";
    TextBox2.Text = "";
    TextBox3.Text = "";

    GridView1.DataSource = ds;
    GridView1.DataBind();
    GridView1.DataSource = null;

}


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

Я пытаюсь добавить данные в таблицу. Он отображает сообщение об ошибке входной массив длиннее количества столбцов

2 Ответов

Рейтинг:
2

Karthik_Mahalingam

Цитата:
Входной массив длиннее количества столбцов
Вы пытаетесь добавить больше значений столбцов в dataRow,
ds.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text);

проверьте количество столбцов и добавьте правильное количество значений столбцов
int colsCount =  dt.Columns.Count;


обратитесь к этому примеру:
DataTable dt = new DataTable();
       dt.Columns.Add("Col1");
       dt.Rows.Add("Col1 Data"); // Valid
       dt.Rows.Add("Col1 Data", "Col2 Data"); // invalid ,  Input array is longer than the number of columns


Member 13650918

Это работает. bt не отображает вид сетки после ввода этого кода. мой код заключается в добавлении значений в текстовое поле и отображении его в виде сетки. что же делать?

Karthik_Mahalingam

покажи свой код.

Member 13650918

использование системы;
использование системы.Коллекции.Общий;
использование System.Linq;
использование системы.Сеть;
использование System.Web.UI;
используя системы.Веб.Пользовательского интерфейса.WebControls;
использование System.Data;
используя системы.Данных.Поставщики sqlclient;

пространство имен EmpGrid
{
общественный разделяемого класса файл webform1 : система.Веб.Пользовательского интерфейса.Страницы
{
DataTable dt = новый DataTable();
private SqlConnection conn = new SqlConnection(@"источник данных=ADMIN-PC\SQLEXPRESS;начальный каталог=задача;идентификатор пользователя=sa;пароль=ups");

охраняемых недействительными в(объект отправителя, EventArgs в электронной)
{
если (!это.IsPostBack)
{
// если (!ДС.Столбцы.Содержит("id"))


ДТ.колонны.Добавить("id");
// если (!ДС.Столбцы.Содержит("имя"))
ДТ.колонны.Добавить("имя");
// если (!ДС.Столбцы.Содержит("зарплата"))
ДТ.колонны.Добавить("зарплата");




Управления gridview1.Источник данных = ДТ;
Управления gridview1.Привязку();

//gvbind();

}

}
охраняемых недействительными gvbind() {
Коннектикут.Открыть();
SqlCommand cmd = new SqlCommand("Select * from empdet", conn);
SqlDataAdapter da = новый SqlDataAdapter(cmd);
DataSet ds = новый набор данных();
да.Заполнить(ДС);
Коннектикут.Закрывать();
if (ds.Tables[0].Rows.Count > 0) {
Управления gridview1.Источник данных = ДС;
Управления gridview1.Привязку();
} еще {
//ds.Tables[0].Rows.Add(ds.Таблицы[0].NewRow());
Управления gridview1.Источник данных = новая строка[] { };
Управления gridview1.Привязку();


}
}

охраняемых недействительными GridView1_RowDeleting(объект отправителя, GridViewDeleteEventArgs е)
{
GridViewRow row = (GridViewRow)GridView1.Rows[e.Параметр rowindex];
Label lbldeleteid = (метка)строка.FindControl("lblID");
Коннектикут.Открыть();
SqlCommand cmd = new SqlCommand("удалить из empdet, где id='" + конвертировать.ToInt32(GridView1.DataKeys[e.Параметр rowindex].Значение.ToString()) + "'", conn);
УМК.Метод executenonquery();
Коннектикут.Закрывать();
gvbind();
}

охраняемых недействительными GridView1_RowEditing(объект отправителя, GridViewEditEventArgs е)
{

Управления gridview1.EditIndex = е.NewEditIndex;
gvbind();
}
охраняемых недействительными GridView1_RowUpdating(объект отправителя, GridViewUpdateEventArgs е)
{
int id = конвертировать.ToInt32(GridView1.DataKeys[e.Параметр rowindex].Значение);

GridViewRow row = (GridViewRow)GridView1.Rows[e.Параметр rowindex];
Label lblID = строка (Label).FindControl("lblID");

TextBox textName = (текстовое поле)строка.Клетки[1].Элементы управления[0];
TextBox textadd = (текстовое поле)строка.Ячейки[2].Элементы Управления[0];
// TextBox textc = (текстовое поле)строка.Ячейки[2].Элементы Управления[0];



Управления gridview1.EditIndex = -1;
Управления gridview1.Привязку();
Коннектикут.Открыть();

SqlCommand cmd = new SqlCommand("update empdet set name='" + textName.Текст + "',зарплата='" + textadd.Текст + "'где ID='" + идентификатор + "'", соед);


УМК.Метод executenonquery();

Коннектикут.Закрывать();
gvbind();
}

охраняемых недействительными GridView1_PageIndexChanging(объект отправителя, GridViewPageEventArgs е)
{
Управления gridview1.Pageindex было = Е.NewPageIndex;
gvbind();
}
охраняемых недействительными GridView1_RowCancelingEdit(объект отправителя, GridViewCancelEditEventArgs е)
{
Управления gridview1.EditIndex = -1;
gvbind();



}

охраняемых недействительными Add_Click(объект отправителя, EventArgs в электронной)
{
Управления gridview1.Видимое = истинное;

//ds.Columns.Add(new DataColumn("id", typeof(int)));
/

Рейтинг:
2

calibio

Привет, вы пытаетесь добавить новую строку, которая имеет 3 столбца, в то время как у вас есть ноль(0) столбцов в вашем datatable ds. Решение: добавьте столбцы в datatable.
Примечание: Если вы добавили какой-либо столбец привязки данных в gridview1, убедитесь, что имена столбцов вашего dataset/datatable ds имеют те же имена, что и в поле данных столбцов привязки данных gridview.

Попробуйте этот код:

protected void Add_Click(object sender, EventArgs e)
        {
            DataTable ds = new DataTable();

            ds.Columns.Add(new DataColumn("Col1", typeof(string)));
            ds.Columns.Add(new DataColumn("Col2", typeof(string)));
            ds.Columns.Add(new DataColumn("Col3", typeof(string)));
            GridView1.Visible = true;
            //createnewrow();
            
            ds.Rows.Add(TextBox1.Text, TextBox2.Text, TextBox3.Text);

            TextBox1.Text = "";
            TextBox2.Text = "";
            TextBox3.Text = "";

            GridView1.DataSource = ds;
            GridView1.DataBind();
            GridView1.DataSource = null;
        }