【问题标题】:OnRowUpdating Does not take value of edit template textboxOnRowUpdating 不取编辑模板文本框的值
【发布时间】:2013-12-14 10:18:28
【问题描述】:

我正在尝试在行更新时更新我的​​ gridview 中的值。但是,它拒绝接受文本框中写入的值。如果页面没有回发,我会填充 gridview。救命!

网格视图:

  <asp:UpdatePanel runat="server" UpdateMode=Conditional><ContentTemplate>
    <asp:GridView runat="server" ID="searchGV" AutoGenerateColumns="False" GridLines="None"
        CssClass="mGrid" EmptyDataText="The Search Did Not Return Any Results"
        PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt" Width="100%" OnRowCancelingEdit="searchGV_RowCancelingEdit"
        OnRowEditing="searchGV_RowEditing" DataKeyNames="media_id" OnRowUpdating="searchGV_RowUpdating">
        <Columns>
            <asp:BoundField DataField="media_id" Visible="false" HeaderText="" />
            <asp:BoundField DataField="dir_path" Visible="false" HeaderText="Dir" />
            <asp:TemplateField HeaderText="Date Taken" >
                <ItemTemplate>
                    <asp:LinkButton ID="dateLinkCsBtn" OnClientClick='<%#Eval("dir_path","Javascript:return test(\"{0}\",event);")%>'
                        runat="server" Text='<%# Bind("date") %>'></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Media Type">
                <ItemTemplate>
                    <asp:Label runat="server" ID="mediaTypeLbl" Text='<%#Eval("description") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Alias File Name">
                <ItemTemplate>
                    <asp:Label runat="server" ID="aliasFileName" Text='<%#Bind("alias_file_name") %>'></asp:Label>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox runat="server" Text='<%#Bind("alias_file_name") %>' ID="updateAliasTxt"></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ShowEditButton="True" />
        </Columns>
    </asp:GridView>
    </ContentTemplate></asp:UpdatePanel>

代码隐藏:

protected void Page_Load(object sender, EventArgs e)
{

    if (!IsPostBack)
    {
        FillGrid();
    }

}

protected void searchGV_RowEditing(object sender, GridViewEditEventArgs e)
{
    searchGV.EditIndex = e.NewEditIndex;
    FillGrid();
}
protected void searchGV_RowCancelingEdit(object sender,
                          GridViewCancelEditEventArgs e)
{
    searchGV.EditIndex = -1;
    FillGrid();
}

public void FillGrid()
{
    Media_DAO media_query = new Media_DAO();
    searchGV.DataSource = media_query.get_search_media(alias_file_name_txt.Text.Trim(), Convert.ToInt16(mediaTypeDDL.SelectedValue),
            from_date_txt.Text.Trim(), to_date_txt.Text.Trim(), Convert.ToInt16(Session["user_id"]));
    searchGV.DataBind();
}

protected void searchGV_RowUpdating(object sender, GridViewUpdateEventArgs e)
{

    GridViewRow row = searchGV.Rows[e.RowIndex];
    TextBox new_alias = (TextBox)searchGV.Rows[e.RowIndex].FindControl("updateAliasTxt");
    int media_id = Convert.ToInt16(searchGV.DataKeys[e.RowIndex]["media_id"]);

    Media_DAO media_query2 = new Media_DAO();
    media_query2.update_alias_name_by_id(media_id, new_alias.Text.Trim(), Convert.ToInt16(Session["user_id"]));
    searchGV.EditIndex = -1;
    FillGrid();
}

【问题讨论】:

    标签: c# asp.net .net gridview webforms


    【解决方案1】:

    在声明网格时,您只指定了 1 *数据键值*

    asDataKeyNames="media_id"
    

    网格视图的日期键以数组格式存储,从 0 开始。 错误可能是在更新时获取 media_id。您需要按如下方式进行更改。

    protected void searchGV_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
    
        GridViewRow row = searchGV.Rows[e.RowIndex];
        TextBox new_alias = (TextBox)searchGV.Rows[e.RowIndex].FindControl("updateAliasTxt");
        int media_id = Convert.ToInt16(e.Keys[0]); //this will get the media_id
    
        Media_DAO media_query2 = new Media_DAO();
        media_query2.update_alias_name_by_id(media_id, new_alias.Text.Trim(), Convert.ToInt16(Session["user_id"]));
        searchGV.EditIndex = -1;
        FillGrid();
    }
    

    由于之前的方法是 searchGV.DataKeys[e.RowIndex]["media_id"] ,如果您尝试编辑的行号大于 1,您可能无法获取 media_id 值。

    【讨论】:

      【解决方案2】:

      GridView 的DataKeys 属性返回一个DataKey 对象的集合,这些对象表示GridView 每一行的数据键值。因此,DataKeys[1] 给出第 2 行,DataKeys[4] 给出第 5 行 ...

      因此,您需要使用ValueValues 属性来访问关键字段的值。

      而不是这样做:

      int media_id = Convert.ToInt16(searchGV.DataKeys[e.RowIndex]["media_id"]);
      

      这样做:

      int media_id = Convert.ToInt16(searchGV.DataKeys[e.RowIndex].Values["media_id"]);
      // You can also use the Value property which gives the key value at index 0 
      int media_id = Convert.ToInt16(searchGV.DataKeys[e.RowIndex].Value);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-16
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多