我的 GridView 过得很糟糕。我一直在用细齿梳检查我的代码,但找不到问题。
我有一个七列的 ASP.net GridView;数据来自 SQL。两列包含用户可以单击以删除或修改数据库中的条目的 javascript。其他五个字段包含数据库中人员的姓名、电话号码和电子邮件地址。
我的四个字段是 ASP.net TemplateFields。
当页面加载时,一切都正确显示。但是,如果用户单击 JavaScript 链接,单击以按任何字段对 GridView 进行排序,或执行任何其他导致回发的操作,则生成的页面可能不会显示我的 TemplateFields 的内容;他们都是空白的。
只是为了让您可以看到我正在使用的内容,我有一个“名称”列,其定义如下:
<asp:TemplateField HeaderText="Name" SortExpression="name" ItemStyle-Width="150">
<ItemTemplate>
<%#(string)Eval("surname") + ", " + (string)Eval("fname") %>
</ItemTemplate>
</asp:TemplateField>
如果我单步调试调试器中的代码,我会看到在模板字段正确显示的情况下,调试器会在显示名称的行上停止。在字段全部为空的情况下,它会跳过代码以显示这些字段的内容;并且没有任何明显的原因。
似乎导致问题的唯一原因是从查询字符串中设置了一个枚举值(它告诉页面要加载哪些数据)。当枚举值设置为1时,我从来没有看到这个错误,但是当枚举值设置为2时,我似乎总是看到它。
但是,枚举从未在我的 gridview 代码中的任何地方引用过。
无论如何,始终调用 GridView.DataSource = x 并且始终调用 GridView.DataBind()。我尝试单步执行代码并检查数据库中的数据是否正确。我已经尝试调试从中调用 DataBind 的代码块以及 GridViewRow_DataBound 事件处理程序。
我在其他地方看到过有关 TemplateField 问题的其他帖子,但似乎都没有解决这里发生的事情。
有任何想法吗?