我的问题有两个:首先,当设置 asp.net gridview 的 autogeneratecolumns=true 属性时,即使对于 datakeynames 属性中列出的字段也会生成列,这是否是微软的错误?当然,这与 datakeys 的整个基本原理相反吗?其次,有没有一种方法可以使用数据键,而不必将网格中的所有非数据键列显式列出为绑定字段,这既繁琐又不利于维护?
根据 AVD 的评论,我将举一个例子:假设我有这个查询作为我的网格的源
SELECT intAssessmentElementID, strModuleCode, strAssessmentElement,
Weighting, intSemester, SubmissionDate FROM tblAssessmentElements
而且我不想显示 intAssessmentElementID。这是我的gridview定义
<asp:GridView ID="grdAssessmentElements" runat="server" DataKeyNames="intAssessmentElementID">
<Columns>
<asp:BoundField HeaderText="Module Code" DataField="strModuleCode" />
<asp:BoundField HeaderText="Element" DataField="strAssessmentElement" />
<asp:BoundField HeaderText="Weighting" DataField="Weighting" />
<asp:BoundField HeaderText="Semester" DataField="intSemester" />
<asp:BoundField HeaderText="Submission Date" DataField="SubmissionDate" />
</Columns>
</asp:GridView>
写出那些绑定的字段很乏味,如果我向查询中添加一个字段,我必须记住也将它添加到网格定义中。如果 autogeneratecolumns=true,更新将是自动的。但是 autogeneratecolumns=true 会生成所有列,甚至是 datakeynames 中列出的列。我认为这是自相矛盾的。我想要一种同时使用 autogeneratecolumns=true 和 datakeynames 的方法,但 datakeynames 列没有出现。我已经看到许多建议在数据绑定后隐藏列,但它们对我和其他人不起作用 当自动生成列时,即使在 PreRender 中它们似乎也不可用/生成。