0

我编写了一个从数据库中检索数据并返回包含的数据表的方法。

这个数据表在隐藏 ID 字段后绑定到一个gridview控件。

        DataTable dt = _qbObj.getAllTags();
        dvTags.DataSource = dt;

        BoundField bfName = new BoundField();
        bfName.DataField = dt.Columns["Name"].ToString();
        bfName.HeaderText = "Name";

        BoundField bfId = new BoundField();
        bfId.DataField = dt.Columns["ID"].ToString();
        bfId.Visible = false;

        BoundField bfDesc = new BoundField();
        bfDesc.DataField = dt.Columns["Description"].ToString();
        bfDesc.HeaderText = "Description";            

        dvTags.Columns.Add(bfId);
        dvTags.Columns.Add(bfName);
        dvTags.Columns.Add(bfDesc);
        dvTags.DataBind();

对于这个 gridview 控件,我想添加一个编辑按钮,它应该会弹出一个 jquery 模式对话框,我可以在其中输入更新的详细信息。

我意识到我可以使用 a ,但问题是我需要在不刷新页面的情况下弹出该模式对话框,并且不完全支持脚本。

因此,在我的 gridview 中,我插入了一个Item Template

        <asp:GridView ID="dvTags" runat="server" CssClass="labs-grid-view" 
            AutoGenerateColumns="False" >
            <Columns>   
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:Button ID="btnEdit" runat="server" Text="Edit" OnClick="dvTagEdit" CommandName="UpdateRecord"
                            CommandArgument='<%# Eval("ID") %>' />
                    </ItemTemplate>
                </asp:TemplateField>                                 
            </Columns>
        </asp:GridView>

现在,在我完成编辑后,gridview 不会自动更新,因此我有一个专用的刷新网格按钮,它使用以下代码删除现有的“动态插入的列”:-

        int noOfRows = dvTags.Columns.Count;
        if (noOfRows > 1)
        {
            dvTags.Columns.RemoveAt(noOfRows - 1);
            dvTags.Columns.RemoveAt(noOfRows - 2);
            dvTags.Columns.RemoveAt(noOfRows - 3);
            // THERE ARE A TOTAL OF **THREE** COLUMNS
        }  

但问题是,刷新页面几次后,我在 ItemTemplate 中的按钮消失了,在 html 中被替换为“”

请帮我找出错误。我在想有一种更好更简单的方法来实现这一点。如果是这样,我对他们开放。

谢谢阅读,

阿比杰特。

4

1 回答 1

1

有几点需要考虑:

首先,您能否为您的 ItemCommand 事件发布您的代码,该事件正在呈现模式弹出窗口并执行更新?可能是您的编辑后刷新处理不正确。

其次,不要在 GridView 上进行数据绑定“内联”,而是考虑在 Gridview 中使用 RowDataBound 事件。您可以检测正在生成哪一行(页眉、数据、页脚),并且可以在其中正确创建编辑按钮。更好的是,您可以在此方法中访问您的按钮,只需将 CommandArgument 设置为您的 Id。

第三,在你的GridView中使用asp按钮时,点击时会触发“ItemCommand”事件,从而导致回发。

我建议在您的模板列中有一个简单的链接,或者您可以用来触发 jQuery 模态的东西,并且您可以为您的项目设置一个静态命名约定,该约定将正确检索数据以放入您的模态弹出窗口进行编辑. 然后从那里您应该能够正常处理您的更新。

我希望这里有帮助。

于 2013-01-08T20:27:08.293 回答