0

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 并且我从来没有遇到过这个问题。

其他成功的 WebForms

希望有人能告诉我发生了什么事,好吗?

这是 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>

谢谢。

4

1 回答 1

0

没关系 - 我想没有兴趣。我将第二个详细 Gridview 转换为已具有 Edit、Delete 和 Insert 命令字段的 DetailsView。问题已解决 - 没有自定义代码。完美运行。我想没有人真正关心网络表单了,太老了。

于 2020-10-09T20:17:27.873 回答