【发布时间】:2012-08-17 14:37:53
【问题描述】:
我有一个gridview,它有来自SQL 数据库的数据。数据库包含一组需要处理的作业。在我的最后一个专栏中,它说它是否已完成。如果完成,它将显示完成时间的日期时间,但如果没有完成,则数据库包含此单元格的 0,并且需要一个可以使其完成的按钮,当它完成时。
因此,代码首先从数据库中检索数据,然后我想使用 RowDataBound 检查是否需要显示按钮,而不是数据库中的文本。我还需要这个按钮的事件,所以我可以在完成后使用 dateTime 更新数据库。
这是我的网格视图的代码:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="OverviewPlannedJobs" DataKeyNames="ID"
onrowcommand="Gridview1_RowCommand" onrowdatabound="GridView1_RowDataBound"
Width="631px">
<Columns>
<asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID"
InsertVisible="False" ReadOnly="True">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:BoundField>
<asp:BoundField DataField="week" HeaderText="Uke" SortExpression="week">
<HeaderStyle HorizontalAlign="Center" VerticalAlign="Middle" />
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:BoundField>
<asp:BoundField DataField="dayNumb" HeaderText="Dag"
SortExpression="dayNumb">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:BoundField>
<asp:BoundField DataField="oven" HeaderText="Ovn"
SortExpression="oven">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:BoundField>
<asp:BoundField DataField="section" HeaderText="Seksjon"
SortExpression="section">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:BoundField>
<asp:BoundField DataField="pit" HeaderText="Pit" SortExpression="pit">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:BoundField>
<asp:BoundField DataField="job" HeaderText="Jobb"
SortExpression="job">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:BoundField>
<asp:BoundField DataField="priority" HeaderText="Prioritet"
SortExpression="priority">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:BoundField>
<asp:BoundField DataField="timeEdited" HeaderText="Lagt til eller endret"
SortExpression="timeEdited" >
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:BoundField>
<asp:ButtonField ButtonType="Button" CommandName="editts" HeaderText="Valg"
Text="Rediger">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:ButtonField>
<asp:ButtonField ButtonType="Button" CommandName="delete" Text="Slett">
<ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
</asp:ButtonField>
<asp:TemplateField HeaderText="Fullført?" SortExpression="finished">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("finished") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
然后我在后面的代码中有这个 rowdatabound 函数:
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//Make button where finished equals zero
if (e.Row.Cells[11].Text.Equals("0"))
{
//insert button
}
}
【问题讨论】:
-
您可能会发现创建一个模板字段,在其中放置一个按钮,然后根据文本值切换该按钮的 Visible 属性会更容易。否则连接事件和处理视图状态可能有点像动态添加按钮的噩梦。
-
@Ruben Ravnå 我不明白你的实际问题是什么。您正在使用 RowDataBound 事件解决您的问题。实际上你的问题是什么。你需要什么
-
好吧,如果我有十行,也许数字 3,5,8 和 10 是完成的行。然后我希望那些在第十一列中显示日期时间。但其余的,我想要一个按钮,他们可以在工作完成时单击该按钮,然后将更新数据库的时间和日期以完成工作。
-
好的,JcFx,我可以将按钮字段绑定到数据库列吗?那么当按钮不可见时,将显示来自数据库的文本?
-
@RubenRavnå:你可以查看我的答案,我认为它几乎很清楚
标签: c# asp.net gridview code-behind