O' 伟大而强大的 Visual Studio 向导,
(asp.net C#)
我有 2 个员工技能的网格视图。为了简化问题,我只有员工徽章_ID(123 = John Doe)和技能 ID(34 = CNC 车床使用知识)。我的数据库表如下所示:
table: empl_skills
ref_no (key) badge_ID Skill_ID prof_value Need_Improve skill_update
------ -------- -------- ------------ ------------ ------------
1 123 35 Expert No 10/08/20
2 123 36 Proficient No 10/08/20
3 123 37 Expert No 10/08/20
4 319 12 Expert No 10/08/20
5 319 60 Basic Yes 10/08/20
6 225 62 Proficient No 10/08/20
7 225 71 Proficient No 10/08/20
The first ref_no column is the primary key that is (1,1) identity
设置非常简单。第一个 Gridview1 仅显示 badge_ID 和 SELECT,因此您可以选择员工。选中后,Gridview1 将隐藏,第二个 Gridview2 仅显示该员工在 EDIT 和 DELETE 命令字段打开的情况下的技能。这一切都很好,我在设计器中构建了代码,所有工作都在不到 5 分钟的时间内完成。
现在我想添加一个 INSERT 函数。我打算在 FooterTemplate 中执行此操作,其中主键列 (ref_no) 中的 INSERT 链接按钮和其他列中的文本框用于数据输入。为此,我首先需要将默认的 asp:boundfields 转换为 asp:templatefields。一旦我对字段进行了转换,我在命令字段中的 EDIT 和 DELETE 函数就停止了工作,我不知道为什么。
这真的很让人抓狂,因为在下面的所有这些其他网络表单中——超过 30 次,我已经将默认的 asp:boundfields 转换为 asp:templatefields 并且我从来没有遇到过这个问题。
希望有人能告诉我发生了什么事,好吗?
这是 Gridview1 选择员工(我删除了样式的东西)
<asp:GridView ID="GridView1" runat="server" BackColor="White" BorderColor="#999999"
BorderStyle="Solid" BorderWidth="1px"
CellPadding="3" CssClass="centerMyHeader" DataKeyNames="badge_ID"
DataSourceID="SqlDataSource1" OnPreRender="GridView1_PreRender"
ForeColor="Black" GridLines="Vertical">
<AlternatingRowStyle BackColor="#EEEEEE" />
<Columns>
<asp:CommandField ShowSelectButton="True" />
</Columns>
</asp:GridView>
这是 Gridview2,其 boundfields 转换为 templatefields:
<asp:GridView ID="GridView2" runat="server" BackColor="White" BorderColor="#999999"
BorderStyle="Solid" BorderWidth="1px"
CellPadding="3" CssClass="centerMyHeader" DataSourceID="SqlDataSource2"
ForeColor="Black" GridLines="Vertical" AutoGenerateColumns="False">
<AlternatingRowStyle BackColor="#EEEEEE" />
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
<asp:TemplateField HeaderText="ref_no" InsertVisible="False" SortExpression="ref_no">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("ref_no") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label6" runat="server" Text='<%# Bind("ref_no") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="badge_ID" SortExpression="badge_ID">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("badge_ID") %>'>
</asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("badge_ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="skill_ID" SortExpression="skill_ID">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("skill_ID") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("skill_ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="prof_value" SortExpression="prof_value">
<EditItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("prof_value") %>'>
</asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("prof_value") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="need_improve" SortExpression="need_improve">
<EditItemTemplate>
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("need_improve") %>'>
</asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label4" runat="server" Text='<%# Bind("need_improve") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="skill_update" SortExpression="skill_update">
<EditItemTemplate>
<asp:TextBox ID="TextBox5" runat="server" Text='<%# Bind("skill_update") %>'>
</asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("skill_update") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
CodeFile 只是隐藏应该显示或不显示的任何网格视图:
protected void GridView1_PreRender(object sender, EventArgs e)
{
if (GridView1.SelectedRow != null)
{
//when one employee is selected
GridView1.Visible = false;
Label1.Visible = false;
GridView2.Visible = true;
Label2.Visible = true;
btnReload2.Visible = true;
}
else
{
//when the selection list is up (no one selected yet)
GridView2.Visible = false;
Label2.Visible = false;
GridView1.Visible = true;
Label1.Visible = true;
btnReload2.Visible = false;
}
}
虽然最初构建 gridviews 只花了我 5 分钟(你可以看到我已经做了多少次),但我在过去的两天里一直在尝试使用模板字段来完成这项工作。有人可以帮忙吗?谢谢,约翰
编辑:对不起 - 我没有说会发生什么。
编辑链接按钮:当我单击编辑时,会在一行中出现文本框,我可以更改任何列中的数据。然后我点击更新。结果:没有发生更改,也没有引发错误。本质上,什么都没有发生
删除链接按钮:单击删除时,网络表单抛出错误:必须声明标量变量“@ref_no”。不知道他们的意思是什么,或者在哪里?这是在 UpdateParameters 中声明 ref_no 的 SqlDataSource2:
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:TrainingDBConnection %>"
DeleteCommand="DELETE FROM [empl_skills] WHERE [ref_no] = @ref_no"
InsertCommand="INSERT INTO [empl_skills] ([badge_ID], [skill_ID], [need_improve], [skill_update], [prof_value])
VALUES (@badge_ID, @skill_ID, @need_improve, @skill_update, @prof_value)"
SelectCommand="SELECT [ref_no], [badge_ID], [skill_ID], [need_improve], [skill_update], [prof_value] FROM [empl_skills] WHERE ([badge_ID] = @badge_ID)"
UpdateCommand="UPDATE [empl_skills] SET [badge_ID] = @badge_ID, [skill_ID] = @skill_ID, [need_improve] = @need_improve, [skill_update] = @skill_update,
[prof_value] = @prof_value WHERE [ref_no] = @ref_no">
<DeleteParameters>
<asp:Parameter Name="ref_no" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="badge_ID" Type="Int32" />
<asp:Parameter Name="skill_ID" Type="Int32" />
<asp:Parameter Name="need_improve" Type="String" />
<asp:Parameter DbType="Date" Name="skill_update" />
<asp:Parameter Name="prof_value" Type="String" />
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="badge_ID" PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="badge_ID" Type="Int32" />
<asp:Parameter Name="skill_ID" Type="Int32" />
<asp:Parameter Name="need_improve" Type="String" />
<asp:Parameter DbType="Date" Name="skill_update" />
<asp:Parameter Name="prof_value" Type="String" />
<asp:Parameter Name="ref_no" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
谢谢。