0

良い一日

従業員データが表示されたグリッド ビューがあります。

      <asp:TabContainer ID="tcmanagers" runat="server" ActiveTabIndex="0" 
                    Width="100%">
        <asp:TabPanel ID="TabAdmins" runat="server" HeaderText="Admins" TabIndex="3">
                        <ContentTemplate>

                        <asp:Label ID="Label4" runat="server" Font-Bold="False" Font-Italic="False" CssClass="style3"
                        ForeColor="Blue" Width="290px">Select Admins to send:</asp:Label>

                         &nbsp;&nbsp;&nbsp; 
                         <asp:Button ID="Sendadmins" runat="server" Text="Send Email" Width="201px"/>
                         <br />
                         <br />
                         <asp:GridView ID="GridView3" runat="server" AutoGenerateColumns="False" DataKeyNames="Employee_ID"
                            DataSourceID="SqlDataSource3" Width="633px" CssClass="grd">
                         <Columns>
                         <asp:BoundField DataField="Employee_ID" HeaderText="Employee_ID" ReadOnly="True"
                                   SortExpression="Employee_ID" Visible="False" />
                          <asp:BoundField DataField="Employee_Number" HeaderText="Employee Number" SortExpression="Employee_Number">
                         <ItemStyle Width="70px" Wrap="False" />
                         </asp:BoundField>
                         <asp:BoundField DataField="Employee_Surname" HeaderText="Surname" SortExpression="Employee_Surname">
                         <ItemStyle Wrap="False" />
                         </asp:BoundField>
                         <asp:BoundField DataField="Employee_Name" HeaderText="Name" SortExpression="Employee_Name">
                         <ItemStyle Wrap="False" />
                         </asp:BoundField>
                         <asp:BoundField DataField="Employee_Job_Title" HeaderText="Job Title" SortExpression="Employee_Job_Title">
                         <ItemStyle Wrap="False" />
                         </asp:BoundField>
                         <asp:BoundField DataField="Employee_Dept" HeaderText="Department" SortExpression="Employee_Dept">
                         <ItemStyle Wrap="False" />
                         </asp:BoundField>
                         <asp:BoundField DataField="Employee_EMail" HeaderText="Email Address" SortExpression="Employee_EMail">
                         <ItemStyle Wrap="False" />
                         </asp:BoundField>
                         <asp:TemplateField HeaderText="Check All"><HeaderTemplate>
                         <asp:CheckBox ID="chkAlladmin" runat="server" AutoPostBack="True" OnCheckedChanged="chkAllAdmin_CheckedChanged" />
                         </HeaderTemplate>
                         <ItemTemplate>
                         <asp:CheckBox ID="chkAdmin" runat="server" />
                         </ItemTemplate>
                         </asp:TemplateField>
                         </Columns><RowStyle Font-Bold="False" Font-Italic="False" Font-Names="Arial" Font-Size="10pt" />
                         <EditRowStyle Font-Names="Arial" Font-Size="10pt" /><HeaderStyle Font-Bold="False" Font-Italic="False" Font-Names="Arial" Font-Size="10pt"
                             Font-Underline="False" CssClass="grdhead" HorizontalAlign="Center" />
                             <AlternatingRowStyle CssClass="grdalt" />
                             <SelectedRowStyle BackColor="Fuchsia" />
                             </asp:GridView>
                                    <asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"
                                ProviderName="<%$ ConnectionStrings:ApplicationServices.ProviderName %>" SelectCommand="SELECT  dbo.lms_Employee.Employee_ID,dbo.lms_Employee.Employee_EMail,dbo.lms_Employee.Employee_Number, dbo.lms_Employee.Employee_Surname, dbo.lms_Employee.Employee_Name, dbo.lms_Employee.Employee_Job_Title,dbo.lms_Employee.Employee_Dept FROM dbo.aspnet_Membership INNER JOIN  dbo.aspnet_Users ON dbo.aspnet_Membership.UserId = dbo.aspnet_Users.UserId INNER JOIN  dbo.aspnet_UsersInRoles ON dbo.aspnet_Users.UserId = dbo.aspnet_UsersInRoles.UserId INNER JOIN   dbo.lms_Employee ON dbo.aspnet_Users.UserName = dbo.lms_Employee.Employee_UserName WHERE     (dbo.lms_Employee.Employee_Active = 'True') AND (dbo.aspnet_UsersInRoles.RoleId = '9ec9b26d-64a1-4736-8e82-fe6de7c7caac') and Employee_Number <> '100'">
                                </asp:SqlDataSource>
                          </ContentTemplate>
                    </asp:TabPanel>
                </asp:TabContainer>

これで、以下のコードを使用して、その中のすべてのデータを選択することも、一度に 1 つずつ選択することもできます。

Protected Sub chkAllAdmin_CheckedChanged(sender As Object, e As EventArgs)

    For Each gr As GridViewRow In GridView3.Rows
        Dim cb As CheckBox = DirectCast(gr.FindControl("chkAdmin"), CheckBox)
        If DirectCast(sender, CheckBox).Checked Then
            cb.Checked = True
        Else
            cb.Checked = False
        End If
    Next

End Sub

私がやりたいことは、選択したすべての従業員に電子メールを送信することです。私はiisサーバーとsqlサーバーを持っています。したがって、私のデータベースは sql サーバー上にあり、私の Web アプリケーションは iis サーバー上にあります。

これにどのようにアプローチすればよいかわかりません。助けていただければ幸いです。

4

1 に答える 1

0

コーディングはせずに、このタイプのタスクに使用する戦略を次に示します。

  1. BoundField アイテムを TemplateFields に変換します。これを行うと、「lblEmployeeEmail」のように、各フィールドの ItemTemplate 内に意味のある名前を持つコントロールが作成される可能性があります。
  2. ボタンをクリックすると、GridView の項目をループし、行ごとに FindControl() メソッドを使用して CheckBox を検索し (チェックされているかどうかを確認します)、FindControl() を使用して他のフィールドを取得します。必要。(メールのラベルなど)

従うべき一般的なコードパターンは次のとおりです ( learneveryday.netから引用):

foreach (GridViewRow gvrow in GridView1.Rows)
{
   CheckBox CheckBox1 = (CheckBox)gvrow.FindControl("CheckBox1");
   if (CheckBox1.Checked)
   {
      // we write this code for find a label value
      Label lblLookFor = (Label)gvrow.FindControl("lblLookFor");
      string lookfor = lblLookFor.Text;
   }
}

もちろん、これはチェック対象の従業員を取得する方法と、GridViewRows から従業員の電子メール アドレスを取得する方法のみをカバーしています。電子メールの送信方法を既に知っていることを前提としていますが、そうでない場合は、MSDN のドキュメントを参照してください。

于 2013-10-29T13:42:40.697 に答える