0

私のGridviewは、データベーステーブルを表示し、必要に応じて編集と更新を実行する方法です。

データは実際には蛾、年、DaysPerMonth(稼働日数)で構成されています

すべてのフィールドはタイプですInt

したがって、特定の月のint値/ formatの代わりに現在の月を表示するには、データベースから両方の方法で変換を使用しています-グリッドビューに月の名前(文字列)として表示します

   public static CultureInfo ILci = CultureInfo.CreateSpecificCulture("he-IL");

   public static string GetMonthName(int mInt, int mYear=2012)
   {
        DateTime fullDate = new DateTime(mYear, mInt, 2);
        string[] tempDayArray = fullDate.ToString("MMMM", ILci).Split(' ');
        return ILci.DateTimeFormat.GetMonthName(mInt);

    }

「トランスレータ」/フォーマッタを介してデータベースに戻ります

    public static int GetMonthAsInt(string mStr)
    {
        return DateTime.ParseExact(mStr, "MMMM", ILci).Month;

    }

開始からすべての段階に問題はありません-更新モードの場合でも、表示モードから編集-編集モード、

VSデバッガーを使用して、実際には「Good To Go」であるSQLデータソース更新コマンドの値を確認し、SQLサーバークエリでそのコマンドを実行すると、成功した結果が返されます。

したがって、問題は更新の終了時または更新DataBind()の直後のどこかに残ります。最後の行私が得ているエラー/例外は次のとおりです:

入力文字列は、正しい形式ではありませんでした。

これはGV_DaysPerMonth_RowUpdatingイベントハンドラーコードです

    protected void GV_DaysPerMonth_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {

        // by recived i ment what is taken by sql command from gridview

        string recivedNameMonth=string.Empty;
        int recivedYears = 0;
        int recivedDprM = 0;
        int RowNo = 0;

        GridViewRow CurRow = GV_DaysPerMonth.Rows[e.RowIndex];
        string[] formValues = new string[CurRow.Cells.Count-1];
        bool note = ((TextBox)(CurRow.Cells[0].Controls[1])).Text != null;
        if (note)
        {
            for (int i = 0; i < CurRow.Cells.Count-1; i++)
            {
                formValues[i] = ((TextBox)(CurRow.Cells[i].Controls[1])).Text;
            }
            //recivedNameMonth = ((TextBox)(CurRow.Cells[0].Controls[1])).Text;
        }

        RowNo = e.RowIndex + 1;

        recivedNameMonth = formValues[0];
        int Montint = RobCS.RDates.GetMonthAsInt(recivedNameMonth);
        recivedYears = Convert.ToInt32(formValues[1]);
        recivedDprM = Convert.ToInt32(formValues[2]);

        dsWorkDayPerMonth.UpdateCommand = "UPDATE [tblWorkDaysPerMonth] SET [theMonth] = " + Montint+ ", [theYear] = "+recivedYears+",[WorkDaysPerMonth] = " + recivedDprM + " WHERE [recordID] = " + RowNo;

        GV_DaysPerMonth.DataBind();

    } 

でそれを使用する

SqlDataSource

<asp:sqldatasource runat="server" id="dsWorkDayPerMonth" 
ConnectionString="Data Source=(local);Initial Catalog=hental;Integrated Security=True" 
ProviderName="System.Data.SqlClient" 
SelectCommand="SELECT * FROM [tblWorkDaysPerMonth]"
UpdateCommand="UPDATE [tblWorkDaysPerMonth] SET [theMonth] = @theMonth, [theYear] = @theYear, 
                                    [WorkDaysPerMonth] = @WorkDaysPerMonth WHERE [recordID] = @recordID" 
DeleteCommand="DELETE FROM [tblWorkDaysPerMonth] WHERE [recordID] = @recordID" 
InsertCommand="INSERT INTO [tblWorkDaysPerMonth]">
<UpdateParameters> 
    <asp:Parameter Name="theMonth" Type="Int32" /> 
    <asp:Parameter Name="theYear" Type="Int32" /> 
    <asp:Parameter Name="WorkDaysPerMonth" Type="Int32" /> 
    <asp:Parameter Name="recordID" Type="Int32" /> 
</UpdateParameters> 
<DeleteParameters> 
    <asp:Parameter Name="recordID" Type="Int32" /> 
</DeleteParameters> 
</asp:sqldatasource>

GridViewで

                <asp:TemplateField HeaderText="Month" ControlStyle-Width="100" HeaderStyle-Width="120" ItemStyle-HorizontalAlign="Center"> 
                    <ItemTemplate> 
                        <%# Eval("theMonth")%> 
                    </ItemTemplate> 
                    <EditItemTemplate> 
                        <asp:TextBox ID="TBX_theMonth" runat="server" Text='<%# Bind("theMonth")%>' /> 
                    </EditItemTemplate> 

4

1 に答える 1

0

必要なものなしで最初のコード例で実装されたため

       //your connection string here 

        SqlConnection con = RobCS_109.RDB.HentlConn;

        con.Open();
        string updateCMD = dsWorkDayPerMonth.UpdateCommand;
        DataSet ds = new DataSet();
        SqlDataAdapter da;

        //use a select command and SqlConnection
        da = new SqlDataAdapter(dsWorkDayPerMonth.SelectCommand, con);

        //same here i have used all values recived in the example(top one)code
        // event -RowUpdating above, then i am using
       //stored sqlUpdate string for the command below
        da.UpdateCommand = new SqlCommand(SQLUP);
        da.Fill(ds, "tblWorkDayPerMonth");


        dsWorkDayPerMonth.Update();


        con.Close();

今では動作します。イベントの更新で問題が発生した場合は、ここのように試すことができます。後で、usingステートメットを介して改善を試みます。方法を学び次第、

于 2012-09-19T05:46:18.317 に答える