Jeff Franken Ответов: 2

Пожалуйста, помогите с проблемой viewgrid onrowupdating


У меня возникла проблема с извлечением значений из моего GridView в методе OnRowUpdating. Вот мой управления gridview1:

<asp:gridview id="GridView1" runat="server" allowpaging="True" 

="" allowsorting="True" autogenerateeditbutton="True" autogeneratedeletebutton="True" alternatingrowstyle-backcolor="#99CCFF" datasourceid="LinqDataSource1" autogeneratecolumns="False" datakeynames="Month_End_Date" onrowdatabound="OnRowDataBound" onrowupdating="OnRowUpdating">
                 <alternatingrowstyle backcolor="#99CCFF">
                 <columns>
                     <asp:boundfield datafield="Month_End_Date" headertext="Month_End_Date" 

="" readonly="True" sortexpression="Month_End_Date">
                     <asp:boundfield datafield="User_Id" headertext="User_Id" readonly="True" 

="" sortexpression="User_Id">
                     <asp:boundfield datafield="Lock_Modified" headertext="Lock_Modified" 

="" readonly="True" sortexpression="Lock_Modified">
                     <asp:boundfield datafield="Lock" headertext="Lock" readonly="True" 

="" sortexpression="Lock">
                    <asp:templatefield headertext="LockYes">
                        <itemtemplate>
                            <asp:label id="lblLockYes" runat="server" text="<%# Bind("Lock") %>">
                        
                        <edititemtemplate>
                            <asp:label id="lblLockYes" runat="server" text="<%# Bind("Lock")%>" visible="true">
                            <asp:dropdownlist 

="" id="ddlLockYes" runat="server" appenddatabounditems="true" datatextfield="Lock" datavaluefield="Lock">


Вот мой код-зад. Мне нужно вытащить значения для Month_End_Date и Lock.
Я получаю это сообщение об ошибке.
Unable to cast object of type 'System.Web.UI.WebControls.DataControlLinkButton' to type 'System.Web.UI.WebControls.TextBox'.

protected void OnRowUpdating(object sender, GridViewUpdateEventArgs e)
        {

  
            DateTime monthend = DateTime.Parse(((TextBox)GridView1.Rows[e.RowIndex].Cells[0].Controls[0]).Text);
            string drop = dropDownListSelItem;
            //int age = int.Parse(((TextBox)GridView1.Rows[e.RowIndex].Cells[3].Controls[0]).Text);

            //SqlConnection Conn = new SqlConnection(MyGlobals.ConnString);
            //Conn.Open();

            //SqlCommand cmd = new SqlCommand("UPDATE ct_lock SET  lock=@drop where month_end_date=@monthend ", Conn);
            //cmd.Parameters.Add(new SqlParameter("@monthend", monthend));
            //cmd.Parameters.Add(new SqlParameter("@drop", drop));
            //cmd.Parameters.Add(new SqlParameter("@age", age));

            //Conn.Open();
            //cmd.ExecuteNonQuery();
            //Conn.Close();

            //GridView1.EditIndex = -1;
            //fill();





            GridView1.EditIndex = -1;
            GridView1.DataBind();
        }


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

Мне нужно вытащить значения для Month_End_Date и Lock.
Я получаю это сообщение об ошибке. Не удается привести объект типа 'System.Веб.Пользовательского интерфейса.WebControls.Система DataControlLinkButton' в тип '.Веб.Пользовательского интерфейса.WebControls.Текстовое поле".

2 Ответов

Рейтинг:
2

Jeff Franken

все началось со следующего кода:

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


DateTime monthend = Дата-Время.Синтаксический Анализ(Управления Gridview1.Ряды[электронный.Параметр rowindex].Ячейки[1].Текст.Метод toString());

строки капля = dropDownListSelItem;


SqlConnection Conn = new SqlConnection(MyGlobals.ConnString);
Конн.Открыт();

Команда sqlcommand cmd и = новая команда sqlcommand("ct_lock обновление установить замок=@Drop, где month_end_date=@monthend ", соед);
cmd.параметры.Add(new SqlParameter("@monthend", monthend));
cmd.параметры.Add(new SqlParameter ("@drop", drop));

//Conn.Open();
УМК.Метод executenonquery();
Конн.Близко();

//Управления gridview1.EditIndex = -1;
//заполнять();





Управления gridview1.EditIndex = -1;
Управления gridview1.Привязку();
}

удалось найти правильные ячейки, поместив выражение в область наблюдения во время отладки


phil.o

Рад, что вам удалось ее решить.

Рейтинг:
1

phil.o

GridView1.Rows[e.RowIndex].Cells[0].Controls[0] не ссылается на TextBox, как вы думаете, это должно быть, он ссылается на a DataControlLinkButton вместо.

Поставьте точку останова на линии DateTime monthend = ..., нажмите клавишу F5 и следите за структурой datagridview; затем исправьте индексы ячеек/элементов управления соответствующим образом.


Jeff Franken

Я в некотором роде новичок в этом деле. Я поставил точку останова. Запустить его. Наведите курсор на ячейки[0]. Он предлагает клетки. Я расширяюсь. Он предлагает SyncRoot и непубличных членов. Как я вижу значения в ячейках? а значения в элементах управления?

phil.o

Я искал некоторые изображения отладочного представления asp gridview, но не смог найти ничего полезного.
Поэтому я ограничусь общими замечаниями.
Cells[0] - это только первая ячейка текущей строки. У вас также должны быть ячейки[1], ячейки[2] и т. д., фактически столько же ячеек, сколько вы определили столбцов для элемента управления.
Для каждой из ячеек у вас должна быть коллекция элементов управления, которая ссылается на элементы управления в конкретной ячейке.
Боюсь, что здесь я не смогу вам сильно помочь; единственное, что я могу сказать сейчас, это то, что вы должны найти правильный индекс в коллекции элементов управления или ячеек: возможно, текстовое поле находится в ячейках[0].элементы управления[1] (просто пример).