简体   繁体   English

中继器控件中的单选按钮选定值插入到 SQL 数据库

[英]Radio button selected value in Repeater control insert to the SQL database

I had implement the code that in the repeater control with radio button selection.我已经使用单选按钮选择实现了中继器控件中的代码。

Now I want to insert the selected radio button value into a database.现在我想将选定的单选按钮值插入数据库。

Code:代码:

<div id="ManageAddressPage" runat="server" style="margin-top: 10px">
    <asp:Repeater ID="ManageAddressRepeater" runat="server">
        <ItemTemplate>
            <div class="col-8 col-m-12" style="border: solid 1px LightGray">
                <div>
                    <asp:RadioButton ID="RadioButton1" runat="server" Text='<%#Eval("Name") %>' OnClick="javascript:singleselection(this.id)" />  
                </div>
            </div>
        </ItemTemplate>
    </asp:Repeater>

    <asp:Button ID="Button3" runat="server" CssClass="btnProfileSave" Text="Save Address" OnClick="Button3_Click" />
</div>

Javascript: to select one value Javascript: 到 select 一个值

<script type="text/javascript">
function singleselection(rbid) {
    var rbutton = document.getElementById(rbid);
    var rbuttonlist = document.getElementsByTagName("input")

    for (i = 0; i < rbuttonlist.length; i++) {
        if (rbuttonlist[i].type == "radio" && rbuttonlist[i].id !== rbutton.id) {
            rbuttonlist[i].checked = false;
        }
    }
}
</script>

Well, ok, we should have more info here.好吧,我们应该在这里了解更多信息。

We assume some compnay, person or whatever (main table).我们假设一些公司、人员或其他任何东西(主表)。

Then we assume that we display the child records of the address(s) and you want to select which one is active.然后我们假设我们显示地址的子记录并且您想要 select 哪个是活动的。 We might have 2 or 5 address to select from.我们可能有 2 个或 5 个地址到 select 来自。

So, this VERY much suggests that in the database WHICH Address is to be active is required here.因此,这非常表明在数据库中需要激活 WHICH 地址。

So, here is our table of address(s) - child table.所以,这是我们的地址表 - 子表。

在此处输入图像描述

Ok, so we need to display perhaps some information from the main reocrd.好的,所以我们可能需要显示来自主记录的一些信息。

And then for the child records - the address, we need to list them out.然后对于子记录 - 地址,我们需要将它们列出。

So, our markup looks like this:所以,我们的标记看起来像这样:

  <div>
        <br />
        <asp:HiddenField ID="HotelID" runat="server" />

        <div>
            Hotel Name: <asp:label ID="txtHotel" runat="server" Font-Size="X-Large"></asp:label>
            <br />
        </div>
        <h3>Select Active Address</h3>

         <asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <div style="border-style:solid;color:black;width:250px;float:left">
        <asp:RadioButton ID="RadioButton1" runat="server"
            Checked = '<%# Eval("Active") %>'  
            Text = '<%# Eval("AddressLocation") %>'
            AutoPostBack="true"
            PKID = '<%# Eval("ID") %>'
            OnCheckedChanged="RadioButton1_CheckedChanged"
            />
            

        <div style="padding:5px;text-align:right">
            Location : <asp:TextBox ID="txtLoc" runat="server" Text ='<%# Eval("AddressLocation") %>' Width="130px" />
            <br />
            Address: <asp:TextBox ID="txtAddress" runat="server" Text ='<%# Eval("Address") %>'  Width="130px" />
            <br />
            City: <asp:TextBox ID="txtCity" runat="server" Text ='<%# Eval("City") %>'  Width="130px" />
            <br />
            <br />
        </div>
      </div>
       <div style="clear:both;height:10px"></div>
    </ItemTemplate>
</asp:Repeater>
        <br />
    </div>

And our display is thus this:我们的显示是这样的:

在此处输入图像描述

So, if we check any radio button, we have to set that row to Active.因此,如果我们选中任何单选按钮,我们必须将该行设置为 Active。

The code looks like this:代码如下所示:

We assume master reocrd = 19 - one hotel, person - whatever how you selected that.我们假设 master reocrd = 19 - 一家酒店,一个人 - 无论您如何选择。

protected void Page_Load(object sender, System.EventArgs e)
{
    if (IsPostBack == false)
    {
        HotelID.Value = 19;
        LoadData();
    }
}

public void LoadData()
{
    using (SqlCommand cmdSQL = new SqlCommand("SELECT * FROM tblAddress WHERE Hotel_ID = @ID",
                              new SqlConnection(My.Settings.TEST3)))
    {
        cmdSQL.Connection.Open();
        cmdSQL.Parameters.Add("@ID", SqlDbType.Int).Value = HotelID.Value;
        Repeater1.DataSource = cmdSQL.ExecuteReader;
        Repeater1.DataBind();
        cmdSQL.Connection.Close();

        // show hotel name (parent reocord) - Parmater already set
        cmdSQL.Connection.Open();
        cmdSQL.CommandText = "SELECT HotelName from tblHotels WHERE ID = @ID";
        txtHotel.Text = cmdSQL.ExecuteScalar;
    }
}

protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
{
    RadioButton btnRadio = sender;

    // un-check all address - radio button can ONLY click if not selected, so we 
    // always assume checked = true

    using (SqlCommand cmdSQL = new SqlCommand("UPDATE tblAddress SET Active = 0 WHERE Hotel_ID = @ID", 
                              new SqlConnection(My.Settings.TEST3)))
    {
        cmdSQL.Connection.Open();

        cmdSQL.Parameters.Add("@ID", SqlDbType.Int).Value = HotelID.Value;
        cmdSQL.ExecuteNonQuery();

        // Now set this address just clicked as active
        cmdSQL.CommandText = "UPDATE tblAddress SET Active = 1 WHERE ID = @ID";
        cmdSQL.Parameters.Clear();
        cmdSQL.Parameters.Add("@ID", SqlDbType.Int).Value = btnRadio.Attributes.Item("PKID");
        cmdSQL.ExecuteNonQuery();

        LoadData();     // update display
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM