数据绑定后面的代码中填充的gridview

时间:2010-11-16 22:03:07

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

我已经尝试了很多并且已经走到了尽头。

我要在一个页面上显示多个网格视图,所有这些都会动态填充。

我已经找到了一种动态填充gridview并显示它们的方法,但是我无法获得如何修改这些值并按照我想要的方式显示它们。

这是代码。 for .aspx page

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" Runat="Server">
<asp:Panel ID="Panel1" runat="server" ScrollBars ="Auto" Height="500px" BorderColor="#003399" BorderWidth="3px">


</asp:Panel>
</asp:Content>

这是.aspx.cs的代码

for (int j = 0; j < 5; j++)
        {
            GridView Grid = new GridView();
            ArrayList machID = new ArrayList();
            ArrayList machName = new ArrayList();


            Grid.ID = machGrps[j].ToString();
            Grid.AllowSorting = true;
            Grid.CellSpacing = 2;
            Grid.GridLines = GridLines.None;
            Grid.Width = Unit.Percentage(100);

            DataTable dt = new DataTable();
            SqlConnection connection = new SqlConnection(Session["ConnectionStringSQL"].ToString());
            connection.Open();
            SqlCommand sqlCmd = new SqlCommand("select MachineID, MachineName from Machines", connection);
            SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);

            sqlDa.Fill(dt);
            connection.Close();

            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    machID.Add(dt.Rows[i]["MachineID"].ToString());
                    machName.Add(dt.Rows[i]["MachineName"].ToString());

                }

                DataTable taskTable = new DataTable();
                taskTable.Columns.Add("MachineID");
                taskTable.Columns.Add("MachineName");

                if (machID.Count != 0)
                {
                    for (int i = 0; i < machID.Count; i++)
                    {
                        DataRow tableRow = taskTable.NewRow();
                        tableRow["MachineID"] = machID[i];
                        tableRow["MachineName"] = machName[i];

                        taskTable.Rows.Add(tableRow);
                    }
                }                  


                Session["TaskTable"] = taskTable;

                Grid.DataSource = Session["TaskTable"];
                Grid.DataBind();

                Label label = new Label();
                label.Text = "Machine Grp" + Grid.ID;
                Panel1.Controls.Add(label);
                Panel1.Controls.Add(Grid);

            }
        }

注意,由于我直接从表格中浏览GRIDVIEW,因此下面的代码不能完成:

当ondatabound =“GridView1_DataBound”if从.aspx页面调用时,我曾经这样修改

数据绑定代码如下所示:

    protected void GridView1_DataBound(object sender, EventArgs e)
    {
        foreach (GridViewRow myRow in GridView1.Rows)
        {

            //this is where ID is stored in an label template
            Label Label3 = (Label)myRow.FindControl("Label3");
            int val = Convert.ToInt32(Label3.Text);

            Image Image5 = (Image)myRow.FindControl("Image5");
            if (Convert.ToInt32(Label3.Text) < 0)
            {
                Image5.ImageUrl = "~/NewFolder1/warning_16x16.gif";
            }
            else
            {
                Image5.ImageUrl = "~/NewFolder1/1258341827_tick.png";
            }
        }

    }

3 个答案:

答案 0 :(得分:3)

两件事:

protected void GridView1_DataBound(object sender, EventArgs e) {
    foreach (GridViewRow myRow in GridView1.Rows) {
      // blah blah blah code goes here  
    }
}

应该是

//now e is a 
protected void Grid_RowDataBound(object sender, GridViewRowEventArgs e) {
    if (e.Row.RowType == DataControlRowType.DataRow) {
        // blah blah blah, this lets you work on one row at a time.
        // since the framework does this per row, you don't need to parse the gridview
        // yourself, altho you're more than welcome to.
        // But you can get more control this way. I promise.
        Label Label3 = (Label)e.Row.FindControl("Label3");
        int val = Convert.ToInt32(Label3.Text);

        Image Image5 = (Image)e.Row.FindControl("Image5");
        if (val < 0)
        {
            Image5.ImageUrl = "~/NewFolder1/warning_16x16.gif";
        }
        else
        {
            Image5.ImageUrl = "~/NewFolder1/1258341827_tick.png";
        }

        // alternately write the code above like this:
        Image Image5 = (Image)e.Row.FindControl("Image5");
        Image5.ImageUrl = (val < 0) ? "~/NewFolder1/warning_16x16.gif" : "~/NewFolder1/1258341827_tick.png";
        // that's called the ternary operator. Takes up less space, does the same thing.
    }
}

请不要忽略此部分

现在到另一部分,你是否意识到你仍然可以像这样绑定在背后:

GridView1.RowDataBound += GridView1_RowDataBound;

把它放在这里:

for (int j = 0; j < 5; j++)
    {
        GridView Grid = new GridView();
        ArrayList machID = new ArrayList();
        ArrayList machName = new ArrayList();

        //NEW LINE (doesn't need the comment or the blank space tho)
        Grid.RowDataBound += Grid_RowDataBound;

        Grid.ID = machGrps[j].ToString();
        Grid.AllowSorting = true;
        Grid.CellSpacing = 2;
        Grid.GridLines = GridLines.None;
        Grid.Width = Unit.Percentage(100);

答案 1 :(得分:2)

对GridView1_RowDataBound上的动态编辑不在GridView1_DataBound

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Label Label3 = (Label)e.Row.FindControl("Label3");
        ....
    }
}

答案 2 :(得分:1)

当你将DataSource绑定到Session对象时它会爆炸吗?

Grid.DataSource = taskTable;