如何解决在将网格视图转换为as:templatefield
Visual Studio的强大向导
(asp.net C#)
我对员工技能有2个gridviews。为了简化问题,我只有员工badge_ID(123 = John Doe)和skill_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函数便停止工作,我不知道为什么。
这真的很令人发疯,因为在下面的所有其他这些Web表单中-超过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的边界域转换为模板域:
<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分钟即可构建gridview(您可以看到我做了多少次),但我还是花了最后两天的时间来使用templatefields进行这项工作。有人可以帮忙吗?谢谢,约翰
编辑:对不起-我没有说会发生什么。
“编辑”链接按钮:在单击“编辑”的一行上,出现文本框,并且我可以更改任何列中的数据。然后,单击更新。结果:更改不会发生,并且不会引发任何错误。本质上什么也没发生
删除链接按钮:单击删除时,Web表单将引发错误:必须声明标量变量“ @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],[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>
谢谢。
解决方法
没关系-我想没有兴趣。我将第二个详细信息Gridview转换为一个DetailsView,该视图已经具有Edit,Delete和Insert命令域。问题已解决-没有自定义代码。完美地工作。我想再也没有人真正在乎Webform,因为它已经太老了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。