1

これがヘッドスクラッチャーです(少なくとも私にとっては)。

ユーザーがかなりの数のデータ フィールドのフッターに情報を入力できる GridView があります。一般に、これらは次の形式に従います。

<asp:TemplateField HeaderText="Date" ItemStyle-HorizontalAlign="Center">
<FooterTemplate>
    <asp:TextBox ID="NewDate" runat="server" Width="25px" Height="10px" Font-Size="Smaller" ValidateRequestMode="Disabled"></asp:TextBox>
    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="NewDate" Display="Dynamic" ErrorMessage="You must enter a  valid date (MM/DD/YYYY) before submitting...">*</asp:RequiredFieldValidator>
</FooterTemplate>
<ItemTemplate>
    <asp:Label ID="Label1" runat="server" Text='<%# Bind("WeekOf","{0:MM/dd}") %>'></asp:Label>
</ItemTemplate>

InsertCommand は次のようになります (一般化)。

InsertCommand="INSERT INTO [Table] (WeekOf,User,OtherData)
      VALUES (Convert(Date,@WeekOf,101), @User, @OtherData)">

@User は、正常に動作している InsertParameter によって制御されます (機能する SelectCommand / SelectParameter とまったく同じであるため、これはわかっています)。

とにかく、これらのフィールドはグリッドビューにあるため、静的な InsertParameters を割り当てることはできません。これは、GridView のフッターにあるためです。これは、行数が変更されたために変更されます (私が知っていることです...それを行う方法に関する啓発はありません)すばらしい)、だから私はこのような変数をプログラムで宣言しようとしていますが、「スカラー変数 "@WeekOf" を宣言する必要があります」エラーが発生します。私の GridView_RowCommand 関数の一般的な考え方は次のとおりです。

 TextBox WeekOfin = SalesReportingGridView.FooterRow.FindControl("NewDate") as TextBox;
 TextBox OtherDatain = SalesReportingGridView.FooterRow.FindControl("NewOtherData") as TextBox;

 SqlParameter WeekOf = new SqlParameter("@WeekOf", SqlDbType.VarChar, 30);
 WeekOf.Direction = ParameterDirection.Input;
 WeekOf.Value = WeekOfin.Text;
 insertParameters.Add(WeekOf);

 SqlParameter OtherData = new SqlParameter("@OtherData", SqlDbType.Int);
 OtherData.Direction = ParameterDirection.Input;
 OtherData.Value = OtherDatain.Text;
 insertParameters.Add(OtherData);

 SqlDataSource2.Insert();

関連する完全なコードは次のとおりです-

        private List<SqlParameter> insertParameters = new List<SqlParameter>();

    protected void SqlDataSource2_Inserting(object sender, SqlDataSourceCommandEventArgs e)
    {
        e.Command.Parameters.Clear();
        foreach (SqlParameter p in insertParameters)
            e.Command.Parameters.Add(p);

    }

    protected void SalesReportingGridView_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Insert" && Page.IsValid)
        {
            TextBox WeekOfin = SalesReportingGridView.FooterRow.FindControl("NewDate") as TextBox;
            TextBox Data1in = SalesReportingGridView.FooterRow.FindControl("NewData1") as TextBox;
            TextBox Data2in = SalesReportingGridView.FooterRow.FindControl("NewData2") as TextBox;
            TextBox Data3in = SalesReportingGridView.FooterRow.FindControl("NewData3") as TextBox;
            TextBox Data4in = SalesReportingGridView.FooterRow.FindControl("NewData4") as TextBox;
            TextBox Data5in = SalesReportingGridView.FooterRow.FindControl("NewData5") as TextBox;
            TextBox Data6in = SalesReportingGridView.FooterRow.FindControl("NewData6") as TextBox;
            TextBox Data7in = SalesReportingGridView.FooterRow.FindControl("NewData7") as TextBox;
            TextBox Data8in = SalesReportingGridView.FooterRow.FindControl("NewData8") as TextBox;
            TextBox Data9in = SalesReportingGridView.FooterRow.FindControl("NewData9") as TextBox;
            TextBox Data10in = SalesReportingGridView.FooterRow.FindControl("NewData10") as TextBox;
            TextBox Data11in = SalesReportingGridView.FooterRow.FindControl("NewData11") as TextBox;
            TextBox Data12in = SalesReportingGridView.FooterRow.FindControl("NewData12") as TextBox;
            TextBox Data13in = SalesReportingGridView.FooterRow.FindControl("NewData13") as TextBox;
            TextBox Data14in = SalesReportingGridView.FooterRow.FindControl("NewData14") as TextBox;
            TextBox Data15in = SalesReportingGridView.FooterRow.FindControl("NewData15") as TextBox;
            TextBox Data16in = SalesReportingGridView.FooterRow.FindControl("NewData16") as TextBox;
            TextBox Data17in = SalesReportingGridView.FooterRow.FindControl("NewData17") as TextBox;
            TextBox Data18in = SalesReportingGridView.FooterRow.FindControl("NewData18") as TextBox;
            TextBox Data19in = SalesReportingGridView.FooterRow.FindControl("NewData19") as TextBox;
            TextBox Data20in = SalesReportingGridView.FooterRow.FindControl("NewData20") as TextBox;
            TextBox Data21in = SalesReportingGridView.FooterRow.FindControl("NewData21") as TextBox;

            SqlParameter WeekOf = new SqlParameter("@WeekOf", SqlDbType.VarChar, 30);
            WeekOf.Direction = ParameterDirection.Input;
            WeekOf.Value = WeekOfin.Text;
            insertParameters.Add(WeekOf);

            SqlParameter Data1 = new SqlParameter("@Data1", SqlDbType.Int);
            Data1.Direction = ParameterDirection.Input;
            Data1.Value = Data1in.Text;
            insertParameters.Add(Data1);

            SqlParameter Data2 = new SqlParameter("@Data2", SqlDbType.Int);
            Data2.Direction = ParameterDirection.Input;
            Data2.Value = Data2in.Text;
            insertParameters.Add(Data2);

            SqlParameter Data3 = new SqlParameter("@Data3", SqlDbType.Int);
            Data3.Direction = ParameterDirection.Input;
            Data3.Value = Data3in.Text;
            insertParameters.Add(Data3);

            SqlParameter Data4 = new SqlParameter("@Data4", SqlDbType.Int);
            Data4.Direction = ParameterDirection.Input;
            Data4.Value = Data4in.Text;
            insertParameters.Add(Data4);

            SqlParameter Data5 = new SqlParameter("@Data5", SqlDbType.Int);
            Data5.Direction = ParameterDirection.Input;
            Data5.Value = Data5in.Text;
            insertParameters.Add(Data5);

            SqlParameter Data6 = new SqlParameter("@Data6", SqlDbType.Int);
            Data6.Direction = ParameterDirection.Input;
            Data6.Value = Data6in.Text;
            insertParameters.Add(Data6);

            SqlParameter Data7 = new SqlParameter("@Data7", SqlDbType.Int);
            Data7.Direction = ParameterDirection.Input;
            Data7.Value = Data7in.Text;
            insertParameters.Add(Data7);

            SqlParameter Data8 = new SqlParameter("@Data8", SqlDbType.Int);
            Data8.Direction = ParameterDirection.Input;
            Data8.Value = Data8in.Text;
            insertParameters.Add(Data8);

            SqlParameter Data9 = new SqlParameter("@Data9", SqlDbType.Int);
            Data9.Direction = ParameterDirection.Input;
            Data9.Value = Data9in.Text;
            insertParameters.Add(Data9);

            SqlParameter Data10 = new SqlParameter("@Data10", SqlDbType.Int);
            Data10.Direction = ParameterDirection.Input;
            Data10.Value = Data10in.Text;
            insertParameters.Add(Data10);

            SqlParameter Data11 = new SqlParameter("@Data11", SqlDbType.Int);
            Data11.Direction = ParameterDirection.Input;
            Data11.Value = Data11in.Text;
            insertParameters.Add(Data11);

            SqlParameter Data12 = new SqlParameter("@Data12", SqlDbType.Int);
            Data12.Direction = ParameterDirection.Input;
            Data12.Value = Data12in.Text;
            insertParameters.Add(Data12);

            SqlParameter Data13 = new SqlParameter("@Data13", SqlDbType.Int);
            Data13.Direction = ParameterDirection.Input;
            Data13.Value = Data13in.Text;
            insertParameters.Add(Data13);

            SqlParameter Data14 = new SqlParameter("@Data14", SqlDbType.Int);
            Data14.Direction = ParameterDirection.Input;
            Data14.Value = Data14in.Text;
            insertParameters.Add(Data14);

            SqlParameter Data15 = new SqlParameter("@Data15", SqlDbType.Int);
            Data15.Direction = ParameterDirection.Input;
            Data15.Value = Data15in.Text;
            insertParameters.Add(Data15);

            SqlParameter Data16 = new SqlParameter("@Data16", SqlDbType.Int);
            Data16.Direction = ParameterDirection.Input;
            Data16.Value = Data16in.Text;
            insertParameters.Add(Data16);

            SqlParameter Data17 = new SqlParameter("@Data17", SqlDbType.Int);
            Data17.Direction = ParameterDirection.Input;
            Data17.Value = Data17in.Text;
            insertParameters.Add(Data17);

            SqlParameter Data18 = new SqlParameter("@Data18", SqlDbType.Int);
            Data18.Direction = ParameterDirection.Input;
            Data18.Value = Data18in.Text;
            insertParameters.Add(Data18);

            SqlParameter Data19 = new SqlParameter("@Data19", SqlDbType.Int);
            Data19.Direction = ParameterDirection.Input;
            Data19.Value = Data19in.Text;
            insertParameters.Add(Data19);

            SqlParameter Data20 = new SqlParameter("@Data20", SqlDbType.Int);
            Data20.Direction = ParameterDirection.Input;
            Data20.Value = Data20in.Text;
            insertParameters.Add(Data20);

            SqlParameter Data21 = new SqlParameter("@Data21", SqlDbType.Int);
            Data21.Direction = ParameterDirection.Input;
            Data21.Value = Data21in.Text;
            insertParameters.Add(Data21);

            SqlDataSource2.Insert();
        }
    }
}

}

4

1 に答える 1

1

パラメータを追加する方法に関するこの例を見て、テンプレートとしてこれに従ってください。開始するために少しコードを貼り付けます。残りは記入する必要があります..

WeekOf の計算方法に応じて、その値を using ステートメントの外に配置または取得し、Convert(Date,@WeekOf, 101) を実行しようとしている場所に渡します。

using (SqlConnection connection = new SqlConnection(connectionString))
{
    SqlCommand cmd = new SqlCommand("InsertCommand="INSERT INTO [Table] WeekOf,User,OtherData)
  VALUES (Convert(Date,@WeekOf,101), @User, @OtherData)"");
    cmd.CommandType = CommandType.Text;
    cmd.Connection = connection;
    cmd.Parameters.AddWithValue("@WeekOf", WeekOfin.Text);
    cmd.Parameters.AddWithValue("@User", YourUser.Text);
    cmd.Parameters.AddWithValue("@OtherData", txtAddress.Text);
    ...
    ...
    connection.Open();
    try
    {
      cmd.ExecuteNonQuery();
    }
    catch (SqlException ex)
    {
      //MessageDlg.Show(ex.Message); //do what ever kind of logging or error trapping here that you want.. 
    }
    //You will need to explain how you are populating or getting
    // the MM/YY for WeekOf 
    //Personally I would refactor this code it's a bit unorthodox 
}
于 2012-12-27T00:51:29.823 に答える