【问题标题】:Access gridview rows after postback回发后访问 gridview 行
【发布时间】:2014-06-24 07:58:57
【问题描述】:

美好的一天!

我需要动态上传文件并在gridview中显示信息。 文件上传后,我需要在下拉列表中选择文件类型。 但回发后我无法访问 Gridview1 行,并获取选定的文件类型。回发后 Gridview1.Rows.Count = 0.

是否可以从 DropDownLists 中获取选定的值?

<asp:GridView ID="GridView1"  runat="server" ShowHeader="False" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="FileName" />
<asp:TemplateField HeaderText="FileType">
<ItemTemplate>
<asp:DropDownList runat="server">
<asp:ListItem Value="Val1">Val1</asp:ListItem>
<asp:ListItem Value="Val2">Val2</asp:ListItem>
<asp:ListItem Value="Val3">Val3</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField DeleteText="Remove" ShowDeleteButton="true" />
</Columns>
</asp:GridView>

<asp:FileUpload ID="FileUpload" runat="server" onchange="this.form.submit()" />

谢谢

在 Page_Load 中,在 PostBack 期间,GridView 的行是空的。

protected void Page_Load(object sender, EventArgs e)
{
     RestoreForm();

     if (IsPostBack && FileUpload.HasFile)
     {
         AddRow(FileUpload.PostedFile.FileName);
     }

     FilesGridView.RowDeleting += new GridViewDeleteEventHandler(RemoveFileFromTable);
}

private void AddRow(string file)
{
     DataTable dt = (DataTable)Page.Session["Files"];
     if (dt == null)
     {
        AddDataTableToSession();
        dt = (DataTable)Page.Session["Files"];
     }
     DataRow dr = dt.NewRow();
     dr["FileName"] = file;
     dr["FileType"] = 0;
     dt.Rows.Add(dr);
     Page.Session["Files"] = dt;
     FilesGridView.DataSource = dt;
     FilesGridView.DataBind();
 }

 private void AddDataTableToSession()
 {
     DataTable dt = new DataTable("Files");
     DataColumn dc = new DataColumn("FileName", Type.GetType("System.String"));
     dt.Columns.Add(dc);
     dc = new DataColumn("FileType", Type.GetType("System.String"));
     dt.Columns.Add(dc);
     Page.Session["Files"] = dt;
 }

 private void RemoveFileFromTable(object sender, GridViewDeleteEventArgs e)
 {
     int recordToDelete = e.RowIndex;
     DataTable dt = (DataTable)Page.Session["Files"];
     int cn = dt.Rows.Count;
     dt.Rows.RemoveAt(recordToDelete);
     dt.AcceptChanges();
     Page.Session["Files"] = dt;
     FilesGridView.DataSource = dt;
     FilesGridView.DataBind();
 }

【问题讨论】:

  • 你用什么填充 GridView?你能显示填充行的代码吗?
  • KBFilesGridViewFilesGridView有什么区别?
  • 没有区别。只是文字错误

标签: c# asp.net gridview templatefield


【解决方案1】:

尝试像这样更改 Ispostback。

   if (!IsPostBack && FileUpload.HasFile)
   {
     AddRow(FileUpload.PostedFile.FileName);
   }

(或)

   if (IsPostBack == false && FileUpload.HasFile)
   {
     AddRow(FileUpload.PostedFile.FileName);
   }

这样,如果页面加载发生,你的 if 条件就会成立。

【讨论】:

    【解决方案2】:

    您可以找到下拉列表并使用gridview的RowDataBOund事件中的值进行更新,如下所示

    protected void Page_Load(object sender, EventArgs e)
    {
        //RestoreForm();
    
        if (IsPostBack && FileUpload.HasFile)
        {
            AddRow(FileUpload.PostedFile.FileName);
        }
        else
        {
            AddDataTableToSession();
        }
    
        FilesGridView.RowDeleting += new GridViewDeleteEventHandler(RemoveFileFromTable);
        FilesGridView.RowDataBound += KBFilesGridView_RowDataBound;
    
    }
    

    行数据绑定如下

        void KBFilesGridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            DropDownList ddl = e.Row.FindControl("DropDownList1") as DropDownList;
                if (ddl != null)
                {
                    DataRow dr= ((DataRowView)e.Row.DataItem).Row;
                    ddl.SelectedValue = dr["FileType"].ToString();
                }
        }
    

    类似地,您可以获取 remove 方法的下拉列表的值,如下所示

    private void RemoveFileFromTable(object sender, GridViewDeleteEventArgs e)
    {
       if (e.Row.RowType == DataControlRowType.DataRow)
       {
          DropDownList ddl = e.Row.FindControl("DropDownList1") as DropDownList;
          if (ddl != null)
          {              
              if(ddl.SelectedValue == "someValue") doSomeThing();
          }
       }
     }
    

    【讨论】:

    • 谢谢,但我如何在回发后获取下拉列表的选定值?
    • 是的。 RemoveFileFromTable 上的 GridView 中没有行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    相关资源
    最近更新 更多