功能要求是从数据库(SQL Server)获取学生列表(3个coloums)并将其显示在网页上,以及每行前面的空白字段以输入数据。接下来,允许用户输入测试中学生评分的分数,并更新数据库中的分数。
现在,我知道可以使用gridview将Update Button Field作为单独的coloumn来完成。但在这种情况下,每行前面都会有一个更新按钮,用户需要为每个学生点击它(超过100个)。这对用户来说是一项繁琐的工作。
我希望该用户为所有学生输入标记,然后仅单击一个按钮,这将更新所有行。
在按钮点击事件中,我们可以使用GridViewRows的foreach循环,但请帮助我使用用户界面。如何使它成为可能?如何使用单击按钮而不是'n'点击??
可以使用gridview完成吗?还是有其他东西可以完成任务?
由于
答案 0 :(得分:7)
将文本框放在第四列的模板字段中
<asp:TemplateField HeaderText="Marks Scored">
<ItemTemplate>
<asp:TextBox runat="server" ID="txtMarksScored" />
</ItemTemplate>
</asp:TemplateField>
然后在按钮内单击事件循环通过网格视图行并获取文本框以获取输入的值。
protected void Submit_Click(object sender, EventArgs e)
{
foreach (GridViewRow gvr in GridView1.Rows)
{
TextBox txtMarksScored = (TextBox)gvr.FindControl("txtMarksScored");
// Hope you understand what to do next?
// txtMarksScored.Text
}
}
答案 1 :(得分:0)
可以在Matt Dotsons Blog找到完整的多行编辑解决方案。我在自己的应用程序中使用它。
除了注册新的gridview类型并使用新类型交换现有的asp:GridView之外,您至少需要做的是告诉GridView您的“SaveButton”的ID。然后,此按钮将触发更改的每一行的RowUpdating / Updated事件。
有关详细信息和可下载的源代码,请参阅Dotsons博客文章。
答案 2 :(得分:0)
虽然很晚,但可能是我寻找的人。由于您没有提到任何条件或代码示例,因此我认为这是下面的代码:
private void UpdateAllRecord()
{
StringBuilder query = new StringBuilder();
for (int i = 0; i < GridViewName.Rows.Count; i++)
{
GridViewRow row = GridViewName.Rows[i];
using (SqlConnection con = new SqlConnection(connStr)) //use your connection string
{
con.Open();
SqlCommand cmd1 = new SqlCommand("update YourTable set ColumnName=@ColumnName where Id= " + row.Cells[0].Controls.OfType<TextBox>().FirstOrDefault().Text + " ", con);
cmd1.Parameters.AddWithValue("@ColumnName", row.Cells[5].Controls.OfType<TextBox>().FirstOrDefault().Text);
cmd1.ExecuteNonQuery();
con.Close();
}
}
}
//现在将UpdateAllRecord()调用为按钮单击事件或任何其他事件
protected void upload_Click(object sender, EventArgs e)
{
UpdateAllRecord()
}