Я публикую этот вопрос после прочтения других подобных вопросов о моей проблеме, но на самом деле не понимаю, как я могу использовать эту информацию.Использование SqlDataAdapter.Update и RowUpdating для обновления базы данных из gridview
Я в основном писал этот код, чтобы узнать, как я могу использовать SqlDataAdapters для обновления базы данных из GridView.
Я пишу мой GridView в моей странице ASPX следующим образом:
<asp:GridView ID="Clients" runat="server">
<Columns>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<ItemTemplate>
<asp:Label ID="labelName" runat="server" Text='<%# Eval("Name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="textboxName" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField EditText="Edit" ShowEditButton="true" />
</Columns>
</asp:GridView>
Тогда в моем коде позади файла Я пишу следующий код (база данных это просто класс для подключения к базе данных ...) :
Database database = new Database();
database.open_connection();
SqlCommand command = new SqlCommand(query, database.dbConnection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dataTable = new DataTable();
adapter.Fill(dataTable);
SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
Clients.AutoGenerateColumns = false;
Clients.PageIndexChanging += new GridViewPageEventHandler(this.grid_view_page_index_changing);
Clients.Sorting += new GridViewSortEventHandler(this.grid_view_sorting);
Clients.RowEditing += new GridViewEditEventHandler(this.row_editing);
Clients.RowUpdating += new GridViewUpdateEventHandler(this.row_updating);
Clients.RowCancelingEdit += new GridViewCancelEditEventHandler(this.row_canceling_edit);
Clients.AllowPaging = true;
Clients.PageSize = 25;
Clients.AllowSorting = true;
Clients.DataSource = dataTable;
Clients.DataBind();
database.close_connection();
Все это прекрасно работает до сих пор; Функции GridView Sorting, Editing, RowCancellingEdit, PageIndexChanging и т. Д. Работают так, как должны.
Моя проблема в том, что я вызываю функцию RowUpdating.
Что я хочу сделать, это использовать функцию adapter.Update()
для обновления базы данных.
Он не вызывает ошибок в моем текущем коде, но он также не обновляет базу данных.
Как только я нажимаю кнопку «Обновить», текстовое поле редактирования из моего GridView исчезает, и перед тем, как его отредактировать, я остаюсь с исходным значением.
Это моя row_updating()
функция:
public void row_updating(object sender, GridViewUpdateEventArgs e) {
GridViewRow gvr = gridView.Rows[Clients.EditIndex];
TextBox txt = (TextBox)gvr.Cells[0].FindControl("textboxName");
e.NewValues["Name"] = txt.Text;
adapter.Update((DataTable)Clients.DataSource);
Clients.EditIndex = -1;
Clients.DataBind();
}
Я не могу понять, почему он не будет обновлять базу данных (возможно, потому что я делаю это совершенно неправильно)
Я видел вещи вокруг Интернет, который упоминает функцию EndEdit()
, но я не уверен, что это применимо здесь.
Если кто-нибудь может сказать мне, что я делаю неправильно, и почему моя база данных не будет обновляться, это было бы очень признательно.
Я попытался с помощью адаптера .UpdateCommand = builder.GetUpdateCommand(); как это было в ссылке, но я все равно получаю те же результаты. – 2010-11-23 10:55:50