我编写了一个从数据库中检索数据并返回数据表的方法,该方法包含三个列。
此数据表在隐藏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中插入了一个项目模板。
<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被替换为“”
请帮我找错。我认为有一种更好,更简单的方法来实现这一目标。如果是这样,我愿意接受他们。
感谢阅读,
Abijeet。
答案 0 :(得分:1)
需要考虑的一些事项:
首先,你可以为你的ItemCommand事件发布你的代码,它会渲染模态弹出窗口并执行更新吗?可能是您在编辑后的刷新处理不正确。
其次,不要在GridView上进行“内联”数据绑定,而应考虑在Gridview中使用RowDataBound事件。您可以检测正在生成哪一行(标题,数据,页脚),您可以在那里正确创建编辑按钮。更好的是,您可以从此方法中访问您的按钮,只需将CommandArgument设置为您的Id。
第三,在GridView中使用asp按钮时,单击时会触发“ItemCommand”事件,这将导致回发。
我建议在模板列中添加一个简单的链接,或者可以用来触发jQuery模式的东西,并且可以为项目设置静态命名约定,以便正确检索要放入模式的数据用于编辑的弹出窗口然后,您应该可以正常处理更新。
我希望这里有所帮助。