O‘Visual Studio强大而强大的向导,
(asp.net C#)
我有两个关于员工技能的网格视图。为了简化问题,我只有employee badge_ID (123 =无名氏)和skill_ID (34 =数控车床使用知识)。我的数据库表如下所示:
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仅显示该员工的技能,并打开编辑和删除命令字段。这一切都工作得很好,我在设计器中构建了代码,所有工作都在5分钟内完成。
现在我想添加一个插入函数。我打算在主键列(ref_no)中使用INSERT linkbutton并在用于数据输入的其他列中使用textboxes,在FooterTemplate中执行此操作。为此,我首先需要将默认的asp:boundfields转换为asp:templatefield。一旦我完成了字段的转换,我在命令字段中的编辑和删除功能就停止工作了,我不知道为什么。
这真的很让人抓狂,因为在下面所有这些had表单中-超过30次,我将默认的asp:boundfield转换为asp:templatefield,而我从来没有遇到过这个问题。
希望有人能告诉我发生了什么事?
下面是选择员工的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:
<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;
}
}
虽然我最初只花了5分钟来构建网格视图(你可以看到我做了多少次),但我在过去的两天里一直在尝试使用模板字段来实现这一点。有人能帮帮忙吗?谢谢,约翰
编辑:对不起-我没有说会发生什么。
编辑链接按钮:当我单击编辑时,在一行上会出现文本框,并且我可以更改任何列中的数据。然后我单击更新。结果:更改不会发生,也不会抛出错误。从本质上讲,什么都不会发生
删除链接按钮:当单击删除时,webform抛出错误:必须声明标量变量"@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>
谢谢。
发布于 2020-10-10 04:17:28
不要紧--我想没有利息吧。我将第二个细节网格视图转换为一个已经有编辑、删除和插入命令字段的DetailsView。问题解决了-没有自定义代码。工作完美无瑕。我猜现在已经没有人真正关心webforms了,太老了。
https://stackoverflow.com/questions/64268712
复制相似问题