0

SQL データベースからのデータを含むグリッドビューがあります。データベースには、グループが処理する必要があるジョブが含まれています。私の最後のコラムでは、それが終了したかどうかを示しています。完了した場合は、終了したときの dateTime が表示されますが、そうでない場合、データベースにはこのセルの 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
        }

    }
4

2 に答える 2

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 に答える
0

申し訳ありませんが、私にはうまくいきません。理由はわかりませんが、これらのいずれかでエラーが発生します

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

グリッドビューの構成データソースを使用したため、独自のデータバインディング メソッドはありません。

ボタンアイテムテンプレートを作成してから、データベースの結果に応じてテキストを変更するか、ボタンを無効にしようと思います。

于 2012-08-23T12:23:06.980 に答える