如何访问在DetailsView中输入的新值以添加以更新参数? [英] How can I access the new values entered in DetailsView to add to update parameters?

查看:139
本文介绍了如何访问在DetailsView中输入的新值以添加以更新参数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个DetailsView,用于编辑GridView.当我单击编辑按钮时,DetailsView将打开,并与所选GridView行中的值绑定在一起.

我的问题是在DetailsView中进行了更改之后,我无法访问新值以在后面的代码中添加到我的更新参数中.

我将不胜感激,谢谢.

这是我到目前为止的代码:

I have a DetailsView that I am using to edit a GridView. When I click the edit button, the DetailsView opens and is DataBound with the values from the selected GridView Row.

My problem is after making the changes in the DetailsView, I cannot access the new values to add to my update parameters in the code-behind.

I would appreciate any advice or suggestions, thank you.

Here is the code I have so far:

protected void gvEntries_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Determine the index of the selected row.
            int index = gvEntries.SelectedIndex;
            entryID = gvEntries.DataKeys[index].Value.ToString();

            string queryString = ("Select [entryFunctionName], [entrySegment], [entryLOB]," +
            "[entryTime], [entryAccountNumber], [entryProgramRevOrg], [entryQuantity], " +
            "[entryNotes] From tblEntries Where entryEntryID = " + entryID);
            dtEdit = DDLGetData(queryString);

            DetailsView1.ChangeMode(DetailsViewMode.Edit);
            DetailsView1.DataSource = dtEdit;
            DetailsView1.DataBind();

            ModalPopupExtender1.Controls.Add(editPanel);
            ModalPopupExtender1.Show();
        }

        protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
        {
            if (e.NewMode == DetailsViewMode.Edit)
            {
                DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
            }
            else if (e.NewMode == DetailsViewMode.ReadOnly)
            {
                DetailsView1.ChangeMode(DetailsViewMode.Edit);
            }
        }

        DropDownList ddlfunc = new DropDownList();
        DropDownList ddlseg = new DropDownList();
        DropDownList ddlProgramRevOrg = new DropDownList();

        protected void DetailsView1_DataBound(object sender, EventArgs e)
        {
            if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
            {
                DataRowView row = (DataRowView)((DetailsView)sender).DataItem;

                ddlfunc = (DropDownList)((DetailsView)sender).FindControl("ddlfunctions");
                ddlfunc.SelectedValue = row[0].ToString();

                ddlseg = (DropDownList)((DetailsView)sender).FindControl("ddlSegment");
                ddlseg.SelectedValue = row[1].ToString();

                ddlProgramRevOrg = (DropDownList)((DetailsView)sender).FindControl("ddlRevOrg");
                string programs = "Select * From tblPrograms Where prgInactive = 'False'";
                DataTable dtprogram = new DataTable();
                dtprogram = DDLGetData(programs);
                ddlProgramRevOrg.DataSource = dtprogram;
                ddlProgramRevOrg.DataTextField = "prgProgramName";
                ddlProgramRevOrg.DataValueField = "prgRevOrg";
                ddlProgramRevOrg.DataBind();
                ddlProgramRevOrg.SelectedValue = row[5].ToString();
            }
        }

        protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
        {
if (DetailsView1.CurrentMode == DetailsViewMode.Edit)
            {
                ddlfunc = (DropDownList)DetailsView1.TemplateControl.FindControl("ddlfunctions");
                ddlfunc2 = e.NewValues.ToString();
            }
            int index = gvEntries.SelectedIndex;
            entryID = gvEntries.DataKeys[index].Value.ToString();

            //Update database with new info
            String UpdateComm = ("Update [tblEntries] Set [entryFunctionName] = @entryFunctionName Where [entryEntryID] = @entryID");
            string connectionString = Configuration.ConnectionString();

            string function = DetailsView1.FindControl("ddlfunctions").ToString();

            using (SqlConnection conn = new SqlConnection(connectionString)) 
            {
                conn.Open();

                SqlCommand updatecomm = new SqlCommand(UpdateComm, conn);

                updatecomm.Parameters.AddWithValue("@entryFunctionName", function);
                updatecomm.Parameters.AddWithValue("@entryID", entryID);

                updatecomm.ExecuteNonQuery();
                conn.Close();
            }
        }
        
       protected void OkButton_Clicked(object sender, EventArgs e)
       {
           DetailsView1.UpdateItem(false);
           ModalPopupExtender1.Hide();
           BindEntryView();
       }



提供的代码仅试图更新数据库中的一列,以简化操作并使其更易于阅读.

有没有人有任何建议或建议,谢谢?

这是detailsview标记:



The code provided is only attempting to update one column in the database for simplicity and easier reading.

Does anyone have any suggestions or advice please and thank you?

Here is the detailsview markup:

<asp:DetailsView ID="DetailsView1" runat="server" onmodechanging="DetailsView1_ModeChanging" OnItemUpdating="DetailsView1_ItemUpdating"

          DefaultMode="Edit" CssClass="panelStyle" OnDataBound="DetailsView1_DataBound" CausesValidation="false" GridLines="None" AutoGenerateRows="False"><%----%>
        <Fields>
            <asp:TemplateField HeaderText="Function" >
                <EditItemTemplate>
                    <asp:DropDownList ID="ddlfunctions" runat="server"

                        DataSource='<%# _functionCollection %>' DataTextField="Display" DataValueField="Name">
                    </asp:DropDownList>
                    <br />
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server"

                        Text='<%# Bind("entryFunctionName") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("entryFunctionName") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Segment">
                <EditItemTemplate>
                    <asp:DropDownList ID="ddlSegment" runat="server"

                    DataSource="<%# _tempSegmentCollection %>"  DataTextField="Display" DataValueField="Name">
                    <asp:ListItem>Master</asp:ListItem>
                    <asp:ListItem>MCP</asp:ListItem>
                    <asp:ListItem>Misc.</asp:ListItem>
                    </asp:DropDownList>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("entrySegment") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.entrySegment") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="LOB">
                <EditItemTemplate>
                    <asp:DropDownList ID="ddlLOB"  DataSource="<%# _tempLOBCollection %>" DataTextField="Name"

                    DataValueField="Name" runat="server">
                    <asp:ListItem>Workers Compensation</asp:ListItem>
                    </asp:DropDownList>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("entryLOB") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label3" runat="server" Text='<%# Bind("entryLOB") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Time">
                <EditItemTemplate>
                    <asp:TextBox ID="tbTime" runat="server" Text='<%# Bind("entryTime") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("entryTime") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label4" runat="server" Text='<%# Bind("entryTime") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Account Number">
                <EditItemTemplate>
                    <asp:TextBox ID="tbAcctNmbr" runat="server"

                        Text='<%# Bind("entryAccountNumber") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox5" runat="server"

                        Text='<%# Bind("entryAccountNumber") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label5" runat="server" Text='<%# Bind("entryAccountNumber") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Program">
                <EditItemTemplate>
                    <asp:DropDownList ID="ddlRevOrg" runat="server" ><%--DataSource="<%# _programCollection %>" DataTextField="Name" DataValueField="Name"--%>
                    </asp:DropDownList>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox6" runat="server"

                        Text='<%# Bind("entryProgramRevOrg") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label6" runat="server" Text='<%# Bind("entryProgramRevOrg") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Quantity">
                <EditItemTemplate>
                    <asp:TextBox ID="tbQuantity" runat="server" Text='<%# Bind("entryQuantity") %>'></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox7" runat="server" Text='<%# Bind("entryQuantity") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label7" runat="server" Text='<%# Bind("entryQuantity") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Notes">
                <EditItemTemplate>
                    <asp:TextBox ID="tbNotes" runat="server" Text='<%# Bind("entryNotes") %>'

                        TextMode="MultiLine" Height="75px"></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox8" runat="server" Text='<%# Bind("entryNotes") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label8" runat="server" Text='<%# Bind("entryNotes") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:CommandField ShowEditButton="false" />
        </Fields>
    </asp:DetailsView>

推荐答案

在ItemUpdating中,我会尝试:
In ItemUpdating I would try:
string function = ((DropDownList)DetailsView1.FindControl("ddlfunctions")).SelectedValue.ToString();



更新后,您可能需要再次对GridView进行数据绑定以显示新值.



After updating you might need to data-bing GridView again in order to show new values.


这是我最终在ItemUpdating事件处理程序中使用的实际代码:

Here is the actual code I ended up using in my ItemUpdating event handler:

ddlfunc2 = ((DropDownList)((DetailsView)sender).FindControl("ddlfunctions")).SelectedValue;
               e.NewValues["funcFunctionID"] = ddlfunc2;


这篇关于如何访问在DetailsView中输入的新值以添加以更新参数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆