Обновление элементов в GridView через код - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть GV, в котором я хочу обновить свои предметы.Я не использую LDS или что-то еще, потому что я обновляю элементы, которые хранятся в нескольких базах данных.

Вот разметка моего GV:

<asp:GridView runat="server" Height="233px" Width="602px" ID ="gvShowComm" 
        CellPadding="4" ForeColor="#333333" GridLines="None" OnRowEditing = "gvShowComm_RowEditing" 
        OnRowUpdating = "gvShowComm_RowUpdating" 
        OnRowCancelingEdit = "gvShowComm_RowCancelingEdit">

    <Columns>
        <asp:CommandField ShowCancelButton="True" ShowEditButton="True" />

     <asp:TemplateField HeaderText = "Product ID">
         <EditItemTemplate>
         <asp:TextBox ID = "ProductName" runat = "server" Text ='<%# Bind("Product_ID") %>'/>
         </EditItemTemplate>
         <ItemTemplate>
         <asp:Label ID = "ProductName" runat = "server" Text ='<%# Bind("Product_ID") %>'/>
         </ItemTemplate>
     </asp:TemplateField>


     <asp:TemplateField HeaderText = "Plan Name">
         <EditItemTemplate>
         <asp:TextBox ID = "PlanName" runat = "server" Text ='<%# Bind("PlanName") %>'/>
         </EditItemTemplate>
         <ItemTemplate>
         <asp:Label ID = "PlanName" runat = "server" Text ='<%# Bind("PlanName") %>'/>
         </ItemTemplate>
     </asp:TemplateField>

     <asp:TemplateField HeaderText = "1st Yr Comm">
         <EditItemTemplate>
         <asp:TextBox ID = "HiComm" runat = "server" Text ='<%# Bind("HiCommissionOld") %>'/>
         </EditItemTemplate>
         <ItemTemplate>
         <asp:Label ID = "HiComm" runat = "server" Text ='<%# Bind("HiCommissionOld") %>'/>
         </ItemTemplate>
     </asp:TemplateField>

     <asp:TemplateField HeaderText = "2nd Yr Comm">
         <EditItemTemplate>
         <asp:TextBox ID = "LowComm" runat = "server" Text ='<%# Bind("LowCommissionOld") %>'/>
         </EditItemTemplate>
         <ItemTemplate>
         <asp:Label ID = "LowComm" runat = "server" Text ='<%# Bind("LowCommissionOld") %>'/>
         </ItemTemplate>
     </asp:TemplateField>

    </Columns>
    <EditRowStyle BackColor="#999999" />
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
    <SortedAscendingCellStyle BackColor="#E9E7E2" />
    <SortedAscendingHeaderStyle BackColor="#506C8C" />
    <SortedDescendingCellStyle BackColor="#FFFDF8" />
    <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
</asp:GridView>

А вот код, которым я былпытаясь, но я не могу получить обновленный текст в моей переменной 's':

    protected void Page_Load(object sender, EventArgs e)
    {

        if (Session["EntitySelected"] == null)
        {
            MessageBox.Show("Please Select an Entity first!");
            Response.Redirect("~/FrontEnd/AgentList.aspx");
        }

        int getEntity = Int16.Parse(Session["EntitySelected"].ToString());
        this.Label3.Text = "You Selected Entity: " + (string)Session["EntitySelected"];

        dbWebEnrollDataContext dt1 = new dbWebEnrollDataContext(); //This has PlanName!
        CommissionsV2DataContext cv1 = new CommissionsV2DataContext(); //Entity_Product_Point
        var td = from s in GetEntity()
                 join r in GetPlanName() on s.Product_ID equals r.Product_ID
                 where s.Entity_ID == getEntity
                 select new
                 {
                     s.Product_ID,
                     r.PlanName,
                     s.HiCommissionOld,
                     s.LowCommissionOld


                 };
        gvShowComm.DataSource = td;
        gvShowComm.DataBind();
    }

    static IEnumerable<Entity_Product_Point> GetEntity()
    {
        var context = new CommissionsV2DataContext();
        return (from t in context.Entity_Product_Points select t).AsQueryable();
    }

    static IEnumerable<PlanMaster> GetPlanName()
    {
        var context = new dbWebEnrollDataContext();
        return (from t in context.PlanMasters select t).AsQueryable();
    }

    protected void btnAdd_Click(object sender, EventArgs e)
    {


            if (ddlPlan.SelectedValue != null && tb1stYr.Text != "" && tbMaximum.Text != "" && tbRecurring.Text != "")
            {
                //Accessing Variables and defining them.
                using (dbWebEnrollDataContext dt = new dbWebEnrollDataContext())
                    try
                    {
                        int getEntity = Int16.Parse(Session["EntitySelected"].ToString());

                        var productName = ddlPlan.SelectedValue.ToString();

                        decimal firststYrComp = Int16.Parse(tb1stYr.Text.ToString());
                        decimal recurringComp = Int16.Parse(tbRecurring.Text.ToString());
                        decimal maximumPercent = Int16.Parse(tbMaximum.Text.ToString());

                        //Pulling the Product_ID from the PlanMaster Table from WebEnroll DB!

                        //var tr = dt.PlanMasters.First(s => s.PlanName == productName);

                        var tr = from s in dt.PlanMasters
                                 where s.PlanName == productName
                                 select s.Product_ID;

                        decimal finalFirstYrComp = decimal.Round((firststYrComp / maximumPercent), 3);
                        decimal finalRecurringComp = decimal.Round((recurringComp / maximumPercent), 3);

                        //Updating the Table: Entity_Product_Points in CommissionsV2 DB.
                        CommissionsV2DataContext cv = new CommissionsV2DataContext();
                        Entity_Product_Point ev = new Entity_Product_Point();
                        ev.Entity_ID = getEntity;
                        ev.Product_ID = tr.First();
                        ev.HiCommissionOld = (double)firststYrComp;
                        ev.LowCommissionOld = (double)recurringComp;
                        ev.HiCommission = (double)finalFirstYrComp * 100;
                        ev.LowCommission = (double)finalRecurringComp * 100;
                        ev.DateCreated = System.DateTime.Now;
                        cv.Entity_Product_Points.InsertOnSubmit(ev);
                        cv.SubmitChanges();

                        var td = from s in GetEntity()
                                 join r in GetPlanName() on s.Product_ID equals r.Product_ID
                                 where s.Entity_ID == getEntity
                                 select new
                                 {
                                     s.Product_ID,
                                     r.PlanName,
                                     s.HiCommissionOld,
                                     s.LowCommissionOld


                                 };

                        gvShowComm.DataSource = td;
                        gvShowComm.DataBind();

                    }

                    catch (Exception err)
                    {
                        MessageBox.Show("" + err);
                    }
            }

            else
            {
                MessageBox.Show("Please Enter Entry for the textboxes!");
            }

            tb1stYr.Text = "";
            tbMaximum.Text = "";
            tbRecurring.Text = "";
            ddlPlan.SelectedIndex = 0;
        }


    protected void gvShowComm_RowEditing(object sender, GridViewEditEventArgs e) 
    {
        gvShowComm.EditIndex = e.NewEditIndex;
        gvShowComm.DataBind();

    }

    protected void gvShowComm_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        gvShowComm.EditIndex = -1;
        gvShowComm.DataBind();
    }

    protected void gvShowComm_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        System.Web.UI.WebControls.TextBox myBox = gvShowComm.Rows[e.RowIndex].FindControl("PlanName") as System.Web.UI.WebControls.TextBox;
        string s = myBox.Text;
        gvShowComm.DataBind();
    }



    }

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Две идеи: Во-первых, вы можете использовать поля шаблона для ваших столбцов и назвать элемент управления держа ваши данные. Содержимое этих элементов управления можно затем извлечь следующим образом: ((TextBox)e.Row.FindControl("TextBoxProductName")).Text

Шаблон будет выглядеть примерно так:

    <asp:TemplateField HeaderText="Product Name">
        <EditItemTemplate>
            <asp:TextBox ID="TextBoxProductName" runat="server" Text='<%# Bind("Product_Name") %>'/>
        </EditItemTemplate>
        <ItemTemplate>
            <asp:Label ID="LabelProductName" runat="server" Text='<%# Bind("Product_Name") %>'/>
        </ItemTemplate>
    </asp:TemplateField>

Обратите внимание также, что, поскольку вы привязываете данные сетки к представлению сетки вручную, в событии RowEditing (не RowUpdating), инициируемом кнопкой редактирования, вы должны установить индекс редактирования сетки просмотра. Попробуйте:

gvShowComm.EditIndex = e.Row.RowIndex;

Или, во-вторых, вы можете иметь более одного ключа данных в вид сетки. Попробуйте что-то вроде: DataKeyNames="Product_ID,Product_Name,Product_Price"

Эти значения затем могут быть получены следующим образом:

gvShowComm.DataKeys[e.RowIndex]["Product_Name"]

Следует отметить, что DataKeys действительно предназначены только для хранения первичных ключей БД. Использование их для чего-либо еще - взлом. Тем не менее, я иногда нуждался в этом, когда мне нужно было сохранить некоторую информацию для каждой строки, но я не хочу, чтобы она была видимой для пользователя.

Последнее замечание: не помещайте привязку данных в загрузку страницы, если вы не помещаете ее в условное выражение, которое запускается только при начальной загрузке страницы, а не при каждой обратной передаче. Пример: if (! IsPostback) ...

1 голос
/ 08 апреля 2011

Если вы добавите свойство DataKeyNames="Product_ID" в разметку GridViews, вы получите значение Product_ID для RowUpdating как,

var keyValue = gvShowComm.DataKeys[e.RowIndex].Value;
int product = Convert.ToInt32(keyValue);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...