Gridview,将文本单元转换为Code后面的按钮

时间:2012-08-22 07:53:44

标签: c# asp.net gridview code-behind

我有一个gridview,它包含来自SQL数据库的数据。数据库包含组需要使用的作业。在我的最后一栏中,它说它是否已经完成。如果它完成了,它将显示一个dateTime用于何时完成,但如果不是,则数据库包含0表示此单元格,并且需要一个Button,它可以使它完成,当它完成时。

因此代码首先从数据库中检索数据,然后我想使用RowDataBound来检查我是否需要显示一个Button,而不是来自数据库的文本。我还需要一个这个按钮的事件,所以我可以在完成后用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
        }

    }

2 个答案:

答案 0 :(得分: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();
    }

<强> Defautl.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>

<强>截图enter image description here

如果有帮助则标记答案:)

答案 1 :(得分:0)

对不起,它不适合我。无法弄清楚为什么,但在其中一个

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

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

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