kedar001 Ответов: 1

Последовательность данных 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

Нет.
Мне нужно хранить метки только с именем метки ,а при извлечении из БД показывать их в соответствующей позиции

1 Ответов

Рейтинг:
2

F-ES Sitecore

Создайте новый список из существующего и убедитесь, что этот список содержит только заполненные данные, так что что-то вроде

var newList = list.Where(x => !string.IsNullOrWhiteSpace(x.SomeProperty)).ToList();


и сделайте это источником данных вашей сетки.


Maciej Los

5ед!