none
【ASP.NET】如何遍历GridView每项保存数据库 RRS feed

  • 问题



  • 以上是通过GridView控件显示的数据,请问用什么方法保存上图中每项选定的值,然后再存入数据库呢?

    我一开始想到利用ArrayList进行存储,之后发现ArrayList没有多维的,甚至多维可以实现不过太过麻烦。然后我联想到使用多维数组。我的思路是建一个维数是GridView行与列的多维数组,然后进行遍历存入数据库,由于本人愿意使用存储过程进行数据存储,又发现存储过程中不支持数组。现在搁浅在这里,希望得到大家的帮助,请帮忙想个解决方案,谢谢!

    2010年7月15日 9:28

答案

  • 你可以建立一个类,在类中定义字段,存储基本信息,然后你在gridview选中的每行对应一个类的实例,

    然后把这些选中的行对应的类实例添加到list集合中,然后循环遍历集合,把数据插入数据库

     


    http://blog.csdn.net/zx13525079024

    看来是我想的太复杂了,其实一个foreach循环即可搞定该问题。而我总想利用数组解决,所以这里总是绕不开。代码如下:

    foreach (GridViewRow gv in this.GvProduct.Rows)
             {
                 int? p_select = 0, p_insert = 0, p_update = 0, p_delete = 0, p_comment = 0, p_print = 0;
                    if (gv.RowType == DataControlRowType.DataRow) //判断是否为行模式
                    {
                        if (((HtmlInputHidden)gv.FindControl("nodis")).Value != "1") //nodis为前台隐藏控件,用来确认parentID是否为1
                        {
                                if (((CheckBox)gv.FindControl("p_select")).Checked)
                                    p_select = 1;//允许查看
                                if (((CheckBox)gv.FindControl("p_insert")).Checked)
                                    p_insert = 1;//允许新增
                                if (((CheckBox)gv.FindControl("p_update")).Checked)
                                    p_update = 1;//允许修改
                                if (((CheckBox)gv.FindControl("p_delete")).Checked)
                                    p_delete = 1;//允许删除
                                if (((CheckBox)gv.FindControl("p_comment")).Checked)
                                    p_comment = 1;//允许评论
                                if (((CheckBox)gv.FindControl("p_print")).Checked)
                                    p_print = 1;//允许打印

                              //插入数据库代码略过

                      }

                 }

           }

     

    分析:以上操作并没有使用到数组或集合进行数据存取。原因在于foreach循环会循环遍历每一行。就在循环完一行时可以利用事务进行数据库存取。换句话说插入数据要写到foreach中 这就是我的思路。还请各位多多指教!谢谢!

    • 已标记为答案 jinwb1982 2010年7月17日 1:16
    2010年7月17日 1:16

全部回复

  • 你可以建立一个类,在类中定义字段,存储基本信息,然后你在gridview选中的每行对应一个类的实例,

    然后把这些选中的行对应的类实例添加到list集合中,然后循环遍历集合,把数据插入数据库

     


    http://blog.csdn.net/zx13525079024
    2010年7月16日 14:55
  • 你可以建立一个类,在类中定义字段,存储基本信息,然后你在gridview选中的每行对应一个类的实例,

    然后把这些选中的行对应的类实例添加到list集合中,然后循环遍历集合,把数据插入数据库

     


    http://blog.csdn.net/zx13525079024

    看来是我想的太复杂了,其实一个foreach循环即可搞定该问题。而我总想利用数组解决,所以这里总是绕不开。代码如下:

    foreach (GridViewRow gv in this.GvProduct.Rows)
             {
                 int? p_select = 0, p_insert = 0, p_update = 0, p_delete = 0, p_comment = 0, p_print = 0;
                    if (gv.RowType == DataControlRowType.DataRow) //判断是否为行模式
                    {
                        if (((HtmlInputHidden)gv.FindControl("nodis")).Value != "1") //nodis为前台隐藏控件,用来确认parentID是否为1
                        {
                                if (((CheckBox)gv.FindControl("p_select")).Checked)
                                    p_select = 1;//允许查看
                                if (((CheckBox)gv.FindControl("p_insert")).Checked)
                                    p_insert = 1;//允许新增
                                if (((CheckBox)gv.FindControl("p_update")).Checked)
                                    p_update = 1;//允许修改
                                if (((CheckBox)gv.FindControl("p_delete")).Checked)
                                    p_delete = 1;//允许删除
                                if (((CheckBox)gv.FindControl("p_comment")).Checked)
                                    p_comment = 1;//允许评论
                                if (((CheckBox)gv.FindControl("p_print")).Checked)
                                    p_print = 1;//允许打印

                              //插入数据库代码略过

                      }

                 }

           }

     

    分析:以上操作并没有使用到数组或集合进行数据存取。原因在于foreach循环会循环遍历每一行。就在循环完一行时可以利用事务进行数据库存取。换句话说插入数据要写到foreach中 这就是我的思路。还请各位多多指教!谢谢!

    • 已标记为答案 jinwb1982 2010年7月17日 1:16
    2010年7月17日 1:16