0

我有一个 gridview,它有来自 SQL 数据库的数据。数据库包含一组需要处理的作业。在我的最后一个专栏中,它说它是否已完成。如果完成,它将显示完成时间的日期时间,但如果没有完成,则数据库包含此单元格的 0,并且需要一个可以使其完成的按钮,当它完成时。

因此代码首先从数据库中检索数据,然后我想使用 RowDataBound 检查我是否需要显示一个按钮,而不是来自数据库的文本。我还需要这个按钮的事件,所以我可以在完成后使用 dateTime 更新数据库。

这是我的gridview的代码:

<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
        }

    }
4

2 回答 2

0

对不起,它不适合我。不知道为什么,但在其中之一出现错误

DataRow row = ((DataRowView)e.Row.DataItem).Row;
        string value0 = row[3].ToString();

我没有自己的数据绑定方法,因为我使用了 gridview 的配置数据源。

想我会尝试制作一个按钮项目模板,然后根据数据库结果更改文本或禁用按钮。

于 2012-08-23T12:23:06.980 回答
0

试试这个我已经测试过

代码背后:

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            DataRow row = ((DataRowView)e.Row.DataItem).Row;
            string value0 = row[3].ToString();
            if (value0 == "0")
            {
                e.Row.Cells[2].Text = "";
                Button btn=new Button();
                btn.Text="finish";
                e.Row.Cells[2].Controls.Add(btn);
            }
        }
    }
 protected void Page_Load(object sender, EventArgs e)
    {
        gvBind();
    }
    public void gvBind()
    {
        SqlDataAdapter dap=new SqlDataAdapter("select id,name,job,status from myTable",con);
        DataSet ds = new System.Data.DataSet();
        dap.Fill(ds);
        GridView1.DataSource = ds.Tables[0];
        GridView1.DataBind();
    }

默认.aspx:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" 
        onrowdatabound="GridView1_RowDataBound">
        <Columns>
            <asp:TemplateField HeaderText="Name">
                <ItemTemplate >
                <asp:Label ID="l1"   Text='<%# Bind("name") %>' runat="server"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Job">
                <ItemTemplate >
                <asp:Label id="l2" Text='<%# Bind("job") %>' runat="server"></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>

           <asp:TemplateField HeaderText="Status">
           <ItemTemplate >
            <asp:Label ID="l3" Text='<%# Bind("status") %>' runat="server"></asp:Label>
           </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

截图在此处输入图像描述

如果有帮助,请标记答案:)

于 2012-08-23T07:59:22.887 回答