记录01

记录一次开发遇到的问题,项目是asp.net,webform,老项目了

前端是两个下拉框可以双击到另外一个下拉框里面的。

<div style="float: left; padding-top: 40px;">
    <div style="height: 20px; margin-left: 11px; margin-right: 11px;">
        <span>==》</span>
    </div>
    <div style="height: 30px; margin-left: 11px; margin-right: 11px;">
        <span>《==</span>
    </div>
</div>

<div id="s2" style="float: left;">
    <div>
        <select id="rightST" runat="server" multiple="true" style="width: 150px; height: 126px;">
        </select>
    </div>
</div>

生成的html代码如下:

<div id="s1" style="float: left;width: 146px;">
    <div>
        <input name="SelectOP$txtQT" type="text" id="SelectOP_txtQT" style="width:68px;display: block; float: left;" />
        <input type="submit" name="SelectOP$btnSearch" value="查询" id="SelectOP_btnSearch" class="btn mbtn" style="float: left; height: 26px; line-height: 26px; width: 66px; padding: 0px;" />
    </div>
    <div>
        <select name="SelectOP$leftST" id="SelectOP_leftST" ondblclick="SelectLeft_onDbClick" multiple="multiple" style="width: 146px; height: 100px;">
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
</select>
    </div>
</div>

<div style="float: left; padding-top: 40px;">
    <div style="height: 20px; margin-left: 11px; margin-right: 11px;">
        <span>==》</span>
    </div>
    <div style="height: 30px; margin-left: 11px; margin-right: 11px;">
        <span>《==</span>
    </div>
</div>

<div id="s2" style="float: left;">
    <div>
        <select name="SelectOP$rightST" id="SelectOP_rightST" multiple="multiple" style="width: 150px; height: 126px;">
    <option value="1">1</option>
</select>
    </div>
</div>

js脚本如下:

    function  <%=this.ClientID %>()
    {
        // 给select1的option加双击事件,移除左边的,给右边添加相应的数据
        var leftST = '<%= leftST.ClientID %>';
        var rightST = '<%= rightST.ClientID %>';
        var objRTValue = $('#<%= hidRightSelectValue.ClientID %>');
        $('#' + leftST).dblclick(function () {
            $('#' + leftST + ' option:selected').each(function () {
                var selected = $(this);
                if (selected.val() != undefined) {
                    $('#' + rightST).append(selected);
                    objRTValue.val(objRTValue.val() + selected.val() + "");
                }
            });
            // 给右边的选中项恢复不选中状态
            $('#' + rightST + ' option:selected').each(function () {
                $(this).prop("selected", false);//.selected = false;
            });
        });
        // 右边添加相应事件
        $('#' + rightST).dblclick(function () {
            $('#' + rightST + ' option:selected').each(function () {
                var selected = $(this);
                if (selected.val() != undefined) {
                    $('#' + leftST).append(selected);
                    objRTValue.val(objRTValue.val().replace(selected.val() + '', ''));
                }
            });
            // 给左边的选中项恢复不选中状态
            $('#' + leftST + ' option:selected').each(function () {
                $(this).prop("selected", false);//.selected = false;
            });
        });
    };
    $(function () {
        <%=this.ClientID %>();
    });

加ClientID是为了重复使用。

后台代码

        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                //这里正常是不需要的 ScriptManager.RegisterStartupScript(Page, this.GetType(), "Refresh" + this.ClientID, this.ClientID + "();", true);
                InitControl();
            }
        }

        // 初始化控件的值
        private void InitControl()
        {
            DataTable dt = GetDTEvent();
            string SelectOP = GetGetSelectedValue();
            leftST.Items.Clear();
            rightST.Items.Clear();
            if (dt != null && dt.Rows.Count >0)
            {
                if (!string.IsNullOrEmpty(SelectOP))
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        if (SelectOP.Contains(dr[leftST.DataValueField].ToString()))
                        {
                            rightST.Items.Add(new ListItem() { Value = dr[leftST.DataValueField].ToString(), Text = dr[leftST.DataTextField].ToString() });
                        }
                        else
                        {
                            leftST.Items.Add(new ListItem() { Value = dr[leftST.DataValueField].ToString(), Text = dr[leftST.DataTextField].ToString() });
                        }
                    }
                }
                else {
                    TextBind = leftST.DataTextField;
                    ValueBind = leftST.DataValueField;
                    this.DtLSource = dt;
                }
            }
        }

由于select下拉框这里viewstate都没有存储值,导致每次页面postback都会使界面上的select值恢复成原来的,所以没有在界面postback时根据隐藏框的值重新设值。这样对性能还是有损耗的。补充一下

multiple="true" size="1"

设置多选下拉框每次最多可选数目。

 

posted @ 2021-11-14 11:39  vba是最好的语言  阅读(29)  评论(0编辑  收藏  举报