Я пробовал много и дошел до тупика.databind gridview, заселенный кодом
У меня есть, чтобы показать несколько gridviews на одной странице, и все эти данные заполняются динамически.
Я вычислил способ динамического заполнения сетки и отображения их, но я не могу получить, как изменить эти значения и отобразить их, как я хочу.
вот код. для .aspx страницы
<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);
}
}
ПРИМЕЧАНИЕ ЭТОТ КОД НИЖЕ НЕ МОЖЕТ БЫТЬ СДЕЛАНО ANYMORE КАК Я заселить GridView НАПРЯМУЮ ИЗ ТАБЛИЦЫ:
Я использовал так, чтобы изменить это, когда ondatabound = «GridView1_DataBound», если вызывается с .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";
}
}
}
e.Row.RowType == DataControlRowType.DataRow, как вы говорите, займет всю строку, но как мне изменить значение в этой строке. как я вижу, я заселил это динамически. Я имею в виду, что сначала у меня был ярлык, потому что он содержал идентификатор, но теперь у меня нет ярлыка nay, чтобы найти – user175084
drachenstern .. вот что я говорю, что нет элемента управления Label 3, так как там я не создавал gridview в HTML-страницу, поэтому, когда она пытается это сделать "Label Label3 = (Label) e.Row.FindControl (" Label3 ");" он ничего не получит. – user175084
@ user175084 ~ Ах, думаю, я вижу проблему. Знаете ли вы, какую ячейку вы хотите от стола?(вы можете найти это, например, с Firebug), тогда вы можете сделать 'e.Row.Cells [0] .Text' вместо' Label3.Text'. Я просто понял, что вы ищете ярлык, который вы никогда явно не назначали. Вы также можете использовать 'DataItem'' Row' из 'e.Row.DataItem', если вы хотите использовать значение из своего datatable. – jcolebrand