これは、おそらくこれが間違って形成されたSQLによるものだと思われますが、ASP.NET WebフォームのGridViewをSQLデータソースに接続しています。 [コマンドの編集]ボタンをクリックすると、編集テンプレートに変わります。ただし、[更新]ボタンをクリックすると、ボタンがクリックされた行だけでなく、すべての行に変更が書き込まれます。ページには従業員のドロップダウンリストがあり、従業員が選択されると、その従業員の現在のタスクがGridViewに取り込まれます。すべてのレコードを更新するGridVewの更新コマンド
ASPX
<asp:DropDownList ID="ddlEmployee" runat="server" AutoPostBack="True" DataSourceID="ddlEmployeeSQL" DataTextField="Name" DataValueField="EmployeeID">
</asp:DropDownList>
<asp:GridView ID="gvTaskDashboard" runat="server" AutoGenerateColumns="False" DataSourceID="TaskDashboardSQL">
<Columns>
<asp:CommandField HeaderText="Edit" ShowEditButton="true" />
<asp:TemplateField HeaderText="Project #" SortExpression="ProjectID">
<EditItemTemplate>
<asp:Label ID="lblProjectID" runat="server" Text='<%# Bind("ProjectID") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("ProjectID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Project Name" SortExpression="ProjectName">
<EditItemTemplate>
<asp:Label ID="lblProjectName" runat="server" Text='<%# Bind("ProjectName") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label10" runat="server" Text='<%# Bind("ProjectName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Release #" SortExpression="ReleaseID">
<EditItemTemplate>
<asp:Label ID="lblReleaseID" runat="server" Text='<%# Bind("ReleaseID") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("ReleaseID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Task Code" SortExpression="TaskCodeAbbr">
<EditItemTemplate>
<asp:Label ID="lblTaskCode" runat="server" Text='<%# Bind("TaskCodeAbbr") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label11" runat="server" Text='<%# Bind("TaskCodeAbbr") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Status" SortExpression="TaskStatusID">
<EditItemTemplate>
<asp:DropDownList ID="ddlStatus" runat="server" AutoPostBack="True" DataSourceID="ddlStatusSQL"
DataTextField="TaskStatusName" DataValueField="TaskStatusID" SelectedValue='<%# Bind("TaskStatusID") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="ddlStatusSQL" enabled="false"
DataTextField="TaskStatusName" DataValueField="TaskStatusID" SelectedValue='<%# Bind("TaskStatusID") %>'>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Priority" SortExpression="TaskPriorityID">
<EditItemTemplate>
<asp:DropDownList ID="ddlPriority" runat="server" AutoPostBack="True" DataSourceID="ddlPrioritySQL"
DataTextField="TaskPriorityName" DataValueField="TaskPriorityID" SelectedValue='<%# Bind("TaskPriorityID") %>'>
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="True" DataSourceID="ddlPrioritySQL" enabled="false"
DataTextField="TaskPriorityName" DataValueField="TaskPriorityID" SelectedValue='<%# Bind("TaskPriorityID") %>'>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Due Date" SortExpression="DueDate">
<EditItemTemplate>
<asp:TextBox ID="txtDueDate" runat="server" Text='<%# Bind("DueDate", "{0:MM/dd/yyyy}") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("DueDate", "{0:MM/dd/yyyy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Notes" SortExpression="Notes">
<EditItemTemplate>
<asp:TextBox ID="txtNotes" runat="server" Text='<%# Bind("Notes") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label6" runat="server" Text='<%# Bind("Notes") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Date Complete" SortExpression="CompDate">
<EditItemTemplate>
<asp:TextBox ID="txtCompDate" runat="server" Text='<%# Bind("CompDate", "{0:MM/dd/yyyy}") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label7" runat="server" Text='<%# Bind("CompDate", "{0:MM/dd/yyyy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
SQLデータソース
<asp:SqlDataSource ID="ddlEmployeeSQL" runat="server" ConnectionString="<%$ ConnectionStrings:ProWorxConnectionString %>"
SelectCommand="SELECT [EmployeeID], [Name] FROM [tblEmployee] WHERE ([Status] = 'A') ORDER BY [Name]">
</asp:SqlDataSource>
<asp:SqlDataSource ID="TaskDashboardSQL" runat="server" ConnectionString="<%$ ConnectionStrings:ProWorxConnectionString %>"
SelectCommand="SELECT tt.TaskID
, tt.EmployeeID
, tt.ProjectID
, tt.ReleaseID
, tt.TaskStatusID
, tt.TaskPriorityID
, tt.DueDate
, tt.Notes
, tt.CompDate
, p.ProjectName
, tc.TaskCodeAbbr
FROM tblTaskTracker tt INNER JOIN
tblProject p ON tt.ProjectID = p.ProjectID INNER JOIN
tblTaskCode tc ON tt.TaskCodeID = tc.TaskCodeID INNER JOIN
tblTaskStatus ts on tt.TaskStatusID = ts.TaskStatusID
WHERE (tt.EmployeeID = @EmployeeID)
ORDER BY ts.TaskStatusType, tt.TaskPriorityID, tt.DueDate"
InsertCommand="INSERT INTO [tblTaskTracker]
([EmployeeID], [ProjectID], [ReleaseID], [TaskCodeID], [TaskStatusID], [TaskPriorityID], [DueDate], [Notes], [CompDate])
VALUES (@EmployeeID, @ProjectID, @ReleaseID, @TaskCodeID, @TaskStatusID, @TaskPriorityID, @DueDate, @Notes, @CompDate)"
UpdateCommand="UPDATE [tblTaskTracker] SET [TaskStatusID] = @TaskStatusID, [TaskPriorityID] = @TaskPriorityID,
[DueDate] = @DueDate, [Notes] = @Notes, [CompDate] = @CompDate"
DeleteCommand="DELETE FROM [tblTaskTracker] WHERE [TaskID] = @TaskID">
<SelectParameters>
<asp:ControlParameter ControlID="ddlEmployee" Name="EmployeeID" PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="EmployeeID" Type="Int32" />
<asp:Parameter Name="ProjectID" Type="Int32" />
<asp:Parameter Name="ReleaseID" Type="Int32" />
<asp:Parameter Name="TaskCodeID" Type="Int32" />
<asp:Parameter Name="TaskStatusID" Type="Int32" />
<asp:Parameter Name="TaskPriorityID" Type="Int32" />
<asp:Parameter Name="DueDate" Type="DateTime" />
<asp:Parameter Name="Notes" Type="String" />
<asp:Parameter Name="CompDate" Type="DateTime" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="TaskStatusID" Type="Int32" />
<asp:Parameter Name="TaskPriorityID" Type="Int32" />
<asp:Parameter Name="DueDate" Type="DateTime" />
<asp:Parameter Name="Notes" Type="String" />
<asp:Parameter Name="CompDate" Type="DateTime" />
</UpdateParameters>
<DeleteParameters>
<asp:Parameter Name="TaskID" Type="Int32" />
</DeleteParameters>
</asp:SqlDataSource>
/FACEPALM [OK]を、木々とすべてを介して森林。 'UpdateCommand =" UPDATE [tblTaskTracker] SET [TaskStatusID] = @TaskStatusID、[TaskPriorityID] = @ TaskPriorityID、[DueDate] = @DueDate、[Notes] = @Notes、[CompDate] = @CompDate WHEREのようなものでなければならないと仮定します。 [TaskID] = @TaskID "'選択した行のTaskIDとしてどのようにパラメータを定義しますか?私が ' 'のままにしておくと、null taskIDを更新しようとしていると仮定して何も更新されません。 –
心配しないでください。私はそれを考え出した。私はtaskIDの新しいTemplate Fieldを作成し、VisibleをFalseに設定しました。 –