私の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>