C# 如何使用GridView中的DropDownList更新此字段?
我有以下数据库设计:C# 如何使用GridView中的DropDownList更新此字段?,c#,asp.net,sql-server,gridview,C#,Asp.net,Sql Server,Gridview,我有以下数据库设计: Employee Table: --------------- Username, Name, JobTitle, BadgeNo, IsActive, DivisionCode Divisions Table: ---------------- SapCode, DivisionShortcut <asp:TemplateField HeaderText="Division"> <
Employee Table:
---------------
Username, Name, JobTitle, BadgeNo, IsActive, DivisionCode
Divisions Table:
----------------
SapCode, DivisionShortcut
<asp:TemplateField HeaderText="Division">
<ItemTemplate>
<%# Eval("DivisionShortcut")%>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource"
DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True"
SortExpression="Username" />
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<%# Eval("Name")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Job Title">
<ItemTemplate>
<%# Eval("JobTitle")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Badge No.">
<ItemTemplate>
<%# Eval("BadgeNo")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Is Active?">
<ItemTemplate>
<%# Eval("IsActive")%>
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="isActive" runat="server"
Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete?">
<ItemTemplate>
<span onclick="return confirm('Are you sure to Delete the record?')">
<asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton>
</span>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>"
SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive
FROM dbo.Divisions INNER JOIN
dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode"
UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle,
[BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username"
DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username">
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="JobTitle" Type="String" />
<asp:Parameter Name="BadgeNo" Type="String" />
<asp:Parameter Name="DivisionShortcut" Type="String" />
<asp:Parameter Name="Username" Type="String" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="Username" Type="String" />
</DeleteParameters>
</asp:SqlDataSource>
我有一个GridView,我正在使用它添加、删除和更新/编辑员工信息。此信息是员工用户名、姓名、徽章号、职务头衔、IsActive(来自员工表)和Division快捷方式(来自Divisions表)。部门将在DropDownList中列出。分区将在GridView中作为下拉列表列出,并在编辑模式下显示。我现在正在努力通过这个下拉列表更新员工的部门。我编写了代码,但出现以下错误:
*
<asp:TemplateField HeaderText="Division">
<ItemTemplate>
<%# Eval("DivisionShortcut")%>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource"
DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True"
SortExpression="Username" />
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<%# Eval("Name")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Job Title">
<ItemTemplate>
<%# Eval("JobTitle")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Badge No.">
<ItemTemplate>
<%# Eval("BadgeNo")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Is Active?">
<ItemTemplate>
<%# Eval("IsActive")%>
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="isActive" runat="server"
Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete?">
<ItemTemplate>
<span onclick="return confirm('Are you sure to Delete the record?')">
<asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton>
</span>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>"
SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive
FROM dbo.Divisions INNER JOIN
dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode"
UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle,
[BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username"
DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username">
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="JobTitle" Type="String" />
<asp:Parameter Name="BadgeNo" Type="String" />
<asp:Parameter Name="DivisionShortcut" Type="String" />
<asp:Parameter Name="Username" Type="String" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="Username" Type="String" />
</DeleteParameters>
</asp:SqlDataSource>
列名“快捷方式”无效
<asp:TemplateField HeaderText="Division">
<ItemTemplate>
<%# Eval("DivisionShortcut")%>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource"
DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True"
SortExpression="Username" />
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<%# Eval("Name")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Job Title">
<ItemTemplate>
<%# Eval("JobTitle")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Badge No.">
<ItemTemplate>
<%# Eval("BadgeNo")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Is Active?">
<ItemTemplate>
<%# Eval("IsActive")%>
</ItemTemplate>
<EditItemTemplate>
<asp:CheckBox ID="isActive" runat="server"
Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Delete?">
<ItemTemplate>
<span onclick="return confirm('Are you sure to Delete the record?')">
<asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton>
</span>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>"
SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive
FROM dbo.Divisions INNER JOIN
dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode"
UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle,
[BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username"
DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username">
<UpdateParameters>
<asp:Parameter Name="Name" Type="String" />
<asp:Parameter Name="JobTitle" Type="String" />
<asp:Parameter Name="BadgeNo" Type="String" />
<asp:Parameter Name="DivisionShortcut" Type="String" />
<asp:Parameter Name="Username" Type="String" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="Username" Type="String" />
</DeleteParameters>
</asp:SqlDataSource>
- ASP.NET代码:
<asp:TemplateField HeaderText="Division"> <ItemTemplate> <%# Eval("DivisionShortcut")%> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource" DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True" SortExpression="Username" /> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <%# Eval("Name")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Job Title"> <ItemTemplate> <%# Eval("JobTitle")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Badge No."> <ItemTemplate> <%# Eval("BadgeNo")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Is Active?"> <ItemTemplate> <%# Eval("IsActive")%> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="isActive" runat="server" Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Delete?"> <ItemTemplate> <span onclick="return confirm('Are you sure to Delete the record?')"> <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton> </span> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode" UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username" DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username"> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="JobTitle" Type="String" /> <asp:Parameter Name="BadgeNo" Type="String" /> <asp:Parameter Name="DivisionShortcut" Type="String" /> <asp:Parameter Name="Username" Type="String" /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name="Username" Type="String" /> </DeleteParameters> </asp:SqlDataSource>
//For editing any row in the GridView protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; } //For updating the information in any row in the GridView protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { GridViewRow gvrow = GridView1.Rows[e.RowIndex]; DropDownList DivisionsList = (DropDownList)gvrow.FindControl("DivisionsList"); TextBox txtEmployeeName = (TextBox)gvrow.FindControl("txtEmployeeName"); TextBox txtJobTitle = (TextBox)gvrow.FindControl("txtJobTitle"); TextBox txtBadgeNo = (TextBox)gvrow.FindControl("txtBadgeNo"); CheckBox isActive = (CheckBox)gvrow.FindControl("isActive"); //For getting the ID (primary key) of that row string username = GridView1.DataKeys[e.RowIndex].Value.ToString(); string name = txtEmployeeName.Text; string jobTitle = txtJobTitle.Text; string badgeNo = txtBadgeNo.Text; string division = DivisionsList.SelectedValue.ToString(); UpdateEmployeeInfo(username, name, jobTitle, badgeNo, division); } private void UpdateEmployeeInfo(string username, string name, string jobTitle, string badgeNo, string division) { string connString = ConfigurationManager.ConnectionStrings["UsersInfoDBConnectionString"].ConnectionString; SqlConnection conn = new SqlConnection(connString); string update = @"UPDATE Employee SET Name = @Name, JobTitle = @JobTitle, BadgeNo = @BadgeNo, DivisionShortcut = @division WHERE Username = @Username"; SqlCommand cmd = new SqlCommand(update, conn); cmd.Parameters.AddWithValue("@Name", name); cmd.Parameters.AddWithValue("@JobTitle", jobTitle); cmd.Parameters.AddWithValue("@BadgeNo", badgeNo); cmd.Parameters.AddWithValue("@division", division); cmd.Parameters.AddWithValue("@Username", username); //cmd.Parameters.AddWithValue("@IsActive", isActive.checked); try { conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); GridView1.EditIndex = -1; // SqlDataSource1.UpdateCommand = @"UPDATE Employee SET Name = @Name, JobTitle = @JobTitle, // BadgeNo = @BadgeNo // WHERE Username = @Username"; // SqlDataSource1.Update(); } catch (Exception ex) { throw ex; } finally { cmd.Dispose(); conn.Close(); conn.Dispose(); } GridView1.DataBind(); }
那么,我怎样才能通过DropDownList更新员工的部门呢<asp:TemplateField HeaderText="Division"> <ItemTemplate> <%# Eval("DivisionShortcut")%> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource" DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True" SortExpression="Username" /> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <%# Eval("Name")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Job Title"> <ItemTemplate> <%# Eval("JobTitle")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Badge No."> <ItemTemplate> <%# Eval("BadgeNo")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Is Active?"> <ItemTemplate> <%# Eval("IsActive")%> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="isActive" runat="server" Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Delete?"> <ItemTemplate> <span onclick="return confirm('Are you sure to Delete the record?')"> <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton> </span> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode" UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username" DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username"> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="JobTitle" Type="String" /> <asp:Parameter Name="BadgeNo" Type="String" /> <asp:Parameter Name="DivisionShortcut" Type="String" /> <asp:Parameter Name="Username" Type="String" /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name="Username" Type="String" /> </DeleteParameters> </asp:SqlDataSource>
更新:<asp:TemplateField HeaderText="Division"> <ItemTemplate> <%# Eval("DivisionShortcut")%> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource" DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True" SortExpression="Username" /> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <%# Eval("Name")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Job Title"> <ItemTemplate> <%# Eval("JobTitle")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Badge No."> <ItemTemplate> <%# Eval("BadgeNo")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Is Active?"> <ItemTemplate> <%# Eval("IsActive")%> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="isActive" runat="server" Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Delete?"> <ItemTemplate> <span onclick="return confirm('Are you sure to Delete the record?')"> <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton> </span> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode" UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username" DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username"> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="JobTitle" Type="String" /> <asp:Parameter Name="BadgeNo" Type="String" /> <asp:Parameter Name="DivisionShortcut" Type="String" /> <asp:Parameter Name="Username" Type="String" /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name="Username" Type="String" /> </DeleteParameters> </asp:SqlDataSource>
我更新了UpdateEmployeeInfo()方法,但仍然得到相同的错误<asp:TemplateField HeaderText="Division"> <ItemTemplate> <%# Eval("DivisionShortcut")%> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource" DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True" SortExpression="Username" /> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <%# Eval("Name")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Job Title"> <ItemTemplate> <%# Eval("JobTitle")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Badge No."> <ItemTemplate> <%# Eval("BadgeNo")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Is Active?"> <ItemTemplate> <%# Eval("IsActive")%> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="isActive" runat="server" Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Delete?"> <ItemTemplate> <span onclick="return confirm('Are you sure to Delete the record?')"> <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton> </span> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode" UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username" DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username"> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="JobTitle" Type="String" /> <asp:Parameter Name="BadgeNo" Type="String" /> <asp:Parameter Name="DivisionShortcut" Type="String" /> <asp:Parameter Name="Username" Type="String" /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name="Username" Type="String" /> </DeleteParameters> </asp:SqlDataSource>
更新代码:<asp:TemplateField HeaderText="Division"> <ItemTemplate> <%# Eval("DivisionShortcut")%> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource" DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True" SortExpression="Username" /> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <%# Eval("Name")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Job Title"> <ItemTemplate> <%# Eval("JobTitle")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Badge No."> <ItemTemplate> <%# Eval("BadgeNo")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Is Active?"> <ItemTemplate> <%# Eval("IsActive")%> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="isActive" runat="server" Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Delete?"> <ItemTemplate> <span onclick="return confirm('Are you sure to Delete the record?')"> <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton> </span> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode" UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username" DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username"> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="JobTitle" Type="String" /> <asp:Parameter Name="BadgeNo" Type="String" /> <asp:Parameter Name="DivisionShortcut" Type="String" /> <asp:Parameter Name="Username" Type="String" /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name="Username" Type="String" /> </DeleteParameters> </asp:SqlDataSource>
<asp:TemplateField HeaderText="Division"> <ItemTemplate> <%# Eval("DivisionShortcut")%> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource" DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True" SortExpression="Username" /> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <%# Eval("Name")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Job Title"> <ItemTemplate> <%# Eval("JobTitle")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Badge No."> <ItemTemplate> <%# Eval("BadgeNo")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Is Active?"> <ItemTemplate> <%# Eval("IsActive")%> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="isActive" runat="server" Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Delete?"> <ItemTemplate> <span onclick="return confirm('Are you sure to Delete the record?')"> <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton> </span> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode" UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username" DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username"> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="JobTitle" Type="String" /> <asp:Parameter Name="BadgeNo" Type="String" /> <asp:Parameter Name="DivisionShortcut" Type="String" /> <asp:Parameter Name="Username" Type="String" /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name="Username" Type="String" /> </DeleteParameters> </asp:SqlDataSource>
private void UpdateEmployeeInfo(string username, string name, string jobTitle, string badgeNo, string division) { string connString = ConfigurationManager.ConnectionStrings["UsersInfoDBConnectionString"].ConnectionString; SqlConnection conn = new SqlConnection(connString); string update = @"UPDATE Employee SET Name = @Name, JobTitle = @JobTitle, BadgeNo = @BadgeNo WHERE Username = @Username; UPDATE Divisions SET [DivisionShortcut] = @division WHERE SapCode = @SapCode;"; SqlCommand cmd = new SqlCommand(update, conn); cmd.Parameters.AddWithValue("@Name", name); cmd.Parameters.AddWithValue("@JobTitle", jobTitle); cmd.Parameters.AddWithValue("@BadgeNo", badgeNo); cmd.Parameters.AddWithValue("@division", division); cmd.Parameters.AddWithValue("@Username", username); //cmd.Parameters.AddWithValue("@IsActive", isActive.checked); try { conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); GridView1.EditIndex = -1; } catch (Exception ex) { throw ex; } finally { cmd.Dispose(); conn.Close(); conn.Dispose(); } GridView1.DataBind(); }
我看到的是您正在使用UpdateEmployeeInfomethode来更新Employee表的列以及Division表的列,但是在那个sql查询中,您只提到了Employee表,这就是为什么您会出现此错误,因为DivisionShortcut不是Employee表的一部分
根据我的理解,您应该使用分区代码代替分区快捷方式<asp:TemplateField HeaderText="Division"> <ItemTemplate> <%# Eval("DivisionShortcut")%> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource" DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True" SortExpression="Username" /> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <%# Eval("Name")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Job Title"> <ItemTemplate> <%# Eval("JobTitle")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Badge No."> <ItemTemplate> <%# Eval("BadgeNo")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Is Active?"> <ItemTemplate> <%# Eval("IsActive")%> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="isActive" runat="server" Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Delete?"> <ItemTemplate> <span onclick="return confirm('Are you sure to Delete the record?')"> <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton> </span> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode" UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username" DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username"> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="JobTitle" Type="String" /> <asp:Parameter Name="BadgeNo" Type="String" /> <asp:Parameter Name="DivisionShortcut" Type="String" /> <asp:Parameter Name="Username" Type="String" /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name="Username" Type="String" /> </DeleteParameters> </asp:SqlDataSource>
并为您的下拉列表设置AutoPostBack=“True”您能帮我吗?因为我试图修改我的代码,如更新的问题所示,但仍然不起作用。@TechLover根据我的理解,您应该使用DivisionCode代替DivisionShortcut@TechLover保持这样的代码,它将工作您必须为您的下拉列表设置AutoPostBack=“True”,否则它不会接受所选的值。试试这个,让我知道不,它不起作用。我仍然面临@SapCode的问题。<asp:TemplateField HeaderText="Division"> <ItemTemplate> <%# Eval("DivisionShortcut")%> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DivisionsList" runat="server" DataSourceID="DivisionsListDataSource" DataTextField="DivisionShortcut" DataValueField="SapCode"></asp:DropDownList> </EditItemTemplate> </asp:TemplateField> <asp:BoundField DataField="Username" HeaderText="Network ID" ReadOnly="True" SortExpression="Username" /> <asp:TemplateField HeaderText="Name"> <ItemTemplate> <%# Eval("Name")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtEmployeeName" runat="server" Text='<%# Bind("Name")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Job Title"> <ItemTemplate> <%# Eval("JobTitle")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtJobTitle" runat="server" Text='<%# Bind("JobTitle")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Badge No."> <ItemTemplate> <%# Eval("BadgeNo")%> </ItemTemplate> <EditItemTemplate> <asp:TextBox ID="txtBadgeNo" runat="server" Text='<%# Bind("BadgeNo")%>' /> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Is Active?"> <ItemTemplate> <%# Eval("IsActive")%> </ItemTemplate> <EditItemTemplate> <asp:CheckBox ID="isActive" runat="server" Checked='<%# Eval("IsActive").ToString().Equals("True") %>'/> </EditItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Delete?"> <ItemTemplate> <span onclick="return confirm('Are you sure to Delete the record?')"> <asp:LinkButton ID="lnkB" runat="Server" Text="Delete" CommandName="Delete"></asp:LinkButton> </span> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:UsersInfoDBConnectionString %>" SelectCommand="SELECT dbo.Divisions.DivisionShortcut, dbo.employee.Username, dbo.employee.Name, dbo.employee.JobTitle, dbo.employee.BadgeNo, dbo.employee.IsActive FROM dbo.Divisions INNER JOIN dbo.employee ON dbo.Divisions.SapCode = dbo.employee.DivisionCode" UpdateCommand="UPDATE [employee], [Divisions] SET [Name] = @Name, [JobTitle] = @JobTitle, [BadgeNo] = @BadgeNo, [DivisionShortcut] = @division WHERE [Username] = @Username" DeleteCommand="DELETE FROM [employee] WHERE [Username] = @Username"> <UpdateParameters> <asp:Parameter Name="Name" Type="String" /> <asp:Parameter Name="JobTitle" Type="String" /> <asp:Parameter Name="BadgeNo" Type="String" /> <asp:Parameter Name="DivisionShortcut" Type="String" /> <asp:Parameter Name="Username" Type="String" /> </UpdateParameters> <DeleteParameters> <asp:Parameter Name="Username" Type="String" /> </DeleteParameters> </asp:SqlDataSource>