Последовательность данных Gridview
<pre lang="HTML">у меня есть вид сетки.
вид сетки имеет три столбца.
Этикетка | LabelValue | DefaultValue
I1 | A1 / 123
I2
I3
I4 | A2 / 456
я хочу показать данные как указано выше
когда я храню значение в базе данных, я хочу хранить данные только со значениями LabelValue, а не пустыми
так что только
I1 | A1 / 123
I4 | A2 / 456
хранится в БД
поэтому я хочу показать данные в соответствующих строках
как я могу этого достичь ..
<asp:GridView runat="server" ID="grdlabel" AutoGenerateColumns="false" OnRowDataBound="grdlabel_RowDataBound" DataKeyNames="label,labelName,labelValue"> <Columns> <asp:TemplateField HeaderText="ILabel"> <ItemTemplate> <asp:TextBox runat="server" ReadOnly="true" ID="txtlabel"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="LabelName"> <ItemTemplate> <asp:TextBox runat="server" ID="txtLabelName"></asp:TextBox> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="DefaultValue"> <ItemTemplate> <asp:TextBox runat="server" ID="txtDefaultValue"></asp:TextBox> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:Button ID="Button1" runat="server" Text="Save to DB" OnClick="Button1_Click" /> <asp:Button ID="Button2" runat="server" Text="Bind Data From DB" OnClick="Button2_Click" />
#region ... variable... List<data> lstData = null; List<data> lstDataToSave = null; #endregion protected void Page_Load(object sender, EventArgs e) { try { if (!IsPostBack) { lstData = new List<data>(); for (int i = 1; i <= 10; i++) { data oData = new data(); oData.label = "I" + i; oData.labelName = ""; oData.labelValue = ""; lstData.Add(oData); oData = null; } grdlabel.DataSource = lstData; grdlabel.DataBind(); } } catch (Exception ex) { } } protected void grdlabel_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { TextBox txtLabel = e.Row.FindControl("txtlabel") as TextBox; txtLabel.Text = grdlabel.DataKeys[e.Row.RowIndex][0].ToString(); TextBox txtLabelName = e.Row.FindControl("txtLabelName") as TextBox; txtLabelName.Text = grdlabel.DataKeys[e.Row.RowIndex][1].ToString(); TextBox txtDefaultValue = e.Row.FindControl("txtDefaultValue") as TextBox; txtDefaultValue.Text = grdlabel.DataKeys[e.Row.RowIndex][2].ToString(); if (e.Row.RowIndex == 7) { txtLabelName.Text = "FixName1"; txtLabelName.ReadOnly = true; txtDefaultValue.Text = grdlabel.DataKeys[e.Row.RowIndex][2].ToString(); } if (e.Row.RowIndex == 8) { txtLabelName.Text = "FixName2"; txtLabelName.ReadOnly = true; txtDefaultValue.Text = grdlabel.DataKeys[e.Row.RowIndex][2].ToString(); } } } protected void Button1_Click(object sender, EventArgs e) { lstDataToSave = new List<data>(); try { foreach (GridViewRow row in grdlabel.Rows) { TextBox txtLabel = row.FindControl("txtlabel") as TextBox; TextBox txtLabelName = row.FindControl("txtLabelName") as TextBox; TextBox txtDefaultValue = row.FindControl("txtDefaultValue") as TextBox; if (txtLabelName.Text != "") { data oData = new data(); oData.label = txtLabel.Text; oData.labelName = txtLabelName.Text; oData.labelValue = txtDefaultValue.Text; lstDataToSave.Add(oData); } } Session["DataToSave"] = lstDataToSave; } catch (Exception ex) { } } protected void Button2_Click(object sender, EventArgs e) { List<data> lstData = new List<data>(); lstData = (List<data>)Session["DataToSave"]; try { grdlabel.DataSource = lstData; grdlabel.DataBind(); } catch (Exception ex) { } }
Что я уже пробовал:
я попробовал со списком
он показывает такие данные, как
I1 | A1 / 123
I4 | A2 / 456
I3
I4 | |
Karthik_Mahalingam
пост код
kedar001
спасибо за ответ..
пожалуйста, проверьте код .
Karthik_Mahalingam
добавьте все условия ниже .
if (txtLabelName.Текст! = "")
kedar001
Нет.
Мне нужно хранить метки только с именем метки ,а при извлечении из БД показывать их в соответствующей позиции