Вставка данных из gridview одним нажатием кнопки
Я пытаюсь вставить каждую строку из gridview в базу данных одним нажатием кнопки. Код работает без ошибок, но на самом деле ничего не вставляется в базу данных, может ли кто-нибудь заметить, что я сделал не так? Вот код c# из моего события button.
protected void btnSubmit_Click(object sender, EventArgs e) { int index = 0; foreach (GridViewRow row in gvStockTake.Rows) { if (row.RowType == DataControlRowType.DataRow) { Label ID = gvStockTake.Rows[index].FindControl("itemId")as Label; TextBox BAR = gvStockTake.Rows[index].FindControl("txtBar") as TextBox; TextBox STORAGE = gvStockTake.Rows[index].FindControl("txtStorage") as TextBox; SqlConnection con = new SqlConnection(connectionString); SqlCommand cmd = new SqlCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "insert into Stock_Take_Item(ItemID, BarQuantity, StorageQuantity) values(@ID, @BAR, @STORAGE) "; cmd.Parameters.Add("@ID", SqlDbType.VarChar).Value = ID.Text; cmd.Parameters.Add("@BAR", SqlDbType.Int).Value = BAR.Text; cmd.Parameters.Add("@STORAGE", SqlDbType.Int).Value = STORAGE.Text; } index++; } Response.Write("Successfully inserted stock take items."); }
Вот код для заполнения моего Gridview:
void PopulateGridview() { DataTable dtbl = new DataTable(); using (SqlConnection sqlCon = new SqlConnection(connectionString)) { sqlCon.Open(); SqlDataAdapter sqlDa = new SqlDataAdapter("SELECT Item.ItemID, Item.ItemDesc, Stock_Take_Item.BarQuantity, Stock_Take_Item.StorageQuantity FROM Item LEFT JOIN Stock_Take_Item ON Item.ItemID = Stock_Take_Item.ItemID", sqlCon); sqlDa.Fill(dtbl); } gvStockTake.DataSource = dtbl; gvStockTake.DataBind(); }
Вот код для моего Gridview (я удалил все свойства стиля для сокращения целей)
<pre><asp:GridView ID="gvStockTake" runat="server" AutoGenerateColumns="false" ShowHeaderWhenEmpty="true" <Columns> <asp:TemplateField HeaderText="Item ID"> <ItemTemplate> <asp:Label id="itemId" Text='<%# Eval("ItemID")%>' runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Item Description"> <ItemTemplate> <asp:Label Text='<%# Eval("ItemDesc")%>' runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Bar Quantity"> <ItemTemplate> <asp:TextBox ID="txtBar" runat="server"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Storage Quantity"> <ItemTemplate> <asp:TextBox ID="txtStorage" runat="server"></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView>
Я все еще учусь, как иду, так что любые рекомендации будут очень признательны!
Что я уже пробовал:
Я играю с этим кодом уже целую вечность и не могу понять, почему он неправильно вставляется.
j snooze
к счастью для вас, исправить это легко. У вас есть инструкция insert и заполненные параметры...но вы никогда не говорили команде, чтобы она выполнялась :)
cmd.ExecuteNonQuery(); должен сделать трюк, предполагая, что ваш синтаксис SQL верен. (Прямо перед индексом++)
Member 13771716
Эй, Спасибо за быстрый ответ!
Я добавил Это в свой метод btnSubmit_Click и получил эту ошибку -
"Система.InvalidOperationException: 'ExecuteNonQuery: свойство соединения не было инициализировано.'"
j snooze
Конечно же, посмотрите в своем populategridview, где вы открываете свой sqlconn. Кроме того, вы должны сообщить команде SQL, какое соединение sql вы используете.
УМК.Подключение = кон.
итак, 1. Не забудьте открыть sql-соединение с вашим сервером и 2. Убедитесь, что ваша sql-команда знает, какое соединение ей нужно использовать для выполнения инструкции.