Я обновил строку в Gridview, но она не работает.Обновить строку в Gridview?
Вот мой код:
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
//Label lbldeleteid = (Label)row.FindControl("Label1");
string bname= GridView1.DataKeys[e.RowIndex].Values["manufacturer"].ToString();
TextBox tbmanu = (TextBox)GridView1.Rows[e.RowIndex].Cells[0].Controls[1];
var myString = tbmanu.ToString();
SqlCommand cmd = new SqlCommand("manu_upd",con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@manufacturer", SqlDbType.NVarChar,100);
cmd.Parameters["@manufacturer"].Value = myString;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
GridView1.EditIndex = -1;
BindData();
Я получил следующее сообщение об ошибке:
Невозможно привести объект типа 'System.Web.UI.LiteralControl' для типа «System.Web .UI.WebControls.TextBox.
вот мой вид сетки:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="4" DataKeyNames="manufacturer" ForeColor="#333333"
GridLines="None" Width="400px" BorderStyle="Double"
CellSpacing="3" Font-Bold="True" Font-Size="Small" ShowFooter="True"
ShowHeaderWhenEmpty="True" onrowdeleting="GridView1_RowDeleting"
onrowediting="GridView1_RowEditing"
onrowupdating="GridView1_RowUpdating"
onrowcancelingedit="GridView1_RowCancelingEdit"
AutoGenerateEditButton="True">
<AlternatingRowStyle BackColor="White"/>
<Columns>
<asp:TemplateField HeaderText="Number" ItemStyle-
HorizontalAlign="Center">
<ItemTemplate>
<asp:Label ID="lbnaumber" runat="server" Text='<%#
Container.DataItemIndex + 1 %>'></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Manufacturer"
SortExpression="manufacturer">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#
Bind("manufacturer") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="tbmanu" runat="server" Text='<%#
Bind("manufacturer") %>'></asp:TextBox>
</EditItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
<%--<asp:CommandField ShowEditButton="True" />--%>
<asp:CommandField ShowDeleteButton="True" />
</Columns>
<EditRowStyle BackColor="#2461BF"/><FooterStyle BackColor="#507CD1"
Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White"/>
<PagerStyle BackColor="#2461BF" ForeColor="White"
HorizontalAlign="Center" />
<RowStyle BackColor="#EFF3FB" /><SelectedRowStyle BackColor="#D1DDF1"
Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#F5F7FB"/>
<SortedAscendingHeaderStyle BackColor="#6D95E1" />
<SortedDescendingCellStyle BackColor="#E9EBEF" />
<SortedDescendingHeaderStyle BackColor="#4870BE" />
</asp:GridView>
При изменении индекса моего текстового поля от 1 до 3 он показывает мне ниже ошибки:
Указанный аргумент был вне диапазон допустимых значений. Имя параметра: индекс
Когда я изменить индекс 3 на 2 дает мне ниже ошибки:
Невозможно привести объект типа «» System.Web.UI.WebControls.DataControlLinkButton для ввода «System.Web.UI.WebControls.TextBox».
У меня есть один обязательный полевой валидатор в моей форме, но когда я включаю, что обновление проверки в виде сетки не работает.
Вы можете показать изображение сетки? какие средства контроля имеют в нем? – Zeeshan
Хорошо, что ваша позиция 'textbox' - это не то, что вы описали в коде' FindControl', см. Нумерация ячеек начинается с нуля. Проверьте обновленный ответ. –
Мне очень жаль, см. «Ячейка» содержит три элемента управления: «метка» и «текстовое поле» и подсчет числа ячеек, а управление начинается с нуля. Поэтому я думаю, что количество ваших элементов управления будет равно 2, а не 3 или 0 (извините :-)), эта ошибка возникает, когда вы объявили что-то, чего не существует в нашем случае, мы объявили 'Control [3]', а общее количество элементов управления 3, но это 0,1,2, поэтому ваше текстовое поле находится на третьей позиции, которая равно 2. –