ここにあるBulkEditGridViewコントロール(GridViewを継承)を使用しています:http://blogs.msdn.com/b/mattdotson/archive/2005/11/09/real-world-gridview-bulk-editing.aspx
現在、保存ボタンがあり、ボタンを押すと変更されたすべてのアイテムが一覧表示されますが、代わりに「更新が行われていません」というメッセージが表示されます。DataGridのテキストを変更しても。DirtyRowsが正しく入力されないのはなぜですか?データベースを更新する前にこれをテストしています。
私のaspxページは次のようになります:
<rwg:BulkEditGridView ID="EditableGrid" AutoGenerateColumns="False" OnRowUpdating="EditableGrid_RowUpdating" OnRowEditing="EditRecord" SaveButtonID="SaveButton" runat="server">
<Columns>
<asp:BoundField HeaderText="Question" DataField="Question" />
<asp:BoundField HeaderText="A" DataField="a" />
<asp:BoundField HeaderText="B" DataField="b" />
<asp:BoundField HeaderText="C" DataField="c" />
<asp:BoundField HeaderText="D" DataField="d" />
<asp:BoundField HeaderText="E" DataField="e" />
<asp:BoundField HeaderText="F" DataField="f" />
<asp:BoundField HeaderText="Correct Answer" DataField="CorrectAns" />
<asp:CheckBoxField HeaderText="Shuffle Answers" DataField="ShuffleAnswers" />
<asp:BoundField HeaderText="Course Objective" DataField="CourseObjective" />
</Columns>
</rwg:BulkEditGridView>
背後にある私のコードは次のようになります:
public partial class editExam : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string courseCode = "";
courseCode = Request.QueryString["code"];
if (courseCode.Length > 0)
{
//Show all of the course questions.
Connection conn = new Connection();
SqlParameter p = new SqlParameter("@CourseCode", SqlDbType.VarChar, 10);
p.Value = Connection.validateString(courseCode);
conn.close();
//Gets the exam to display from the database
DataTable dt = conn.query("getExam", p);
if (dt.Rows.Count == 0)
{
//Display an error message
displayError();
}
else
{
//Show all courses
buildPage(dt);
}
}
else
{
//Display an error message
displayError();
}
}
private void buildPage(DataTable dt)
{
EditableGrid.DataSource = dt;
EditableGrid.DataBind();
}
protected void SaveButton_Click(object sender, EventArgs e)
{
if (EditableGrid.DirtyRows.Count == 0)
{
pageContent.InnerHtml = "No updates have been made.";
}
}
protected void EditableGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
StringBuilder rowIndexes = new StringBuilder();
foreach (GridViewRow row in EditableGrid.DirtyRows)
{
rowIndexes.Append((row.RowIndex + 1) + ", ");
}
pageContent.InnerHtml = "updates made to: " + rowIndexes.ToString();
}
}