1

バインディングメソッドを再度呼び出さずに、 datatableinCheckListBox attributesメソッドの値を保持したいpostback

だから私は持っていて、asp:CheckBoxListそれをバインドしています

    if (!IsPostBack)
            {
// code for binding 
    }

ASP.NET

<asp:CheckBoxList ID="chkboxCandidateList" runat="server">
</asp:CheckBoxList>

これが私のバインド方法ですC#

DataTable dtCandidateName = // datatable having all specified column 
            if (dtCandidateName != null && dtCandidateName.Rows.Count > 0)
            {
                chkLstBxCandidateName.Items.Clear();
                ListItem lstItem = null;
                for (int i = 0; dtCandidateName.Rows.Count > i; i++)
                {
                    lstItem = new ListItem(Convert.ToString(dtCandidateName.Rows[i]["Candidate Name"]), Convert.ToString(dtCandidateName.Rows[i]["Candidate Id"]));
                    lstItem.Attributes.Add("Email", Convert.ToString(dtCandidateName.Rows[i]["Email"]));
                    lstItem.Attributes.Add("Mobile", Convert.ToString(dtCandidateName.Rows[i]["Mobile"]));
                    chkLstBxCandidateName.Items.Add(lstItem);
                }
            }

そして、ページ読み込みの最初の呼び出しで値を取得しています

HTML

<span email="test@kartika.com" mobile="01111111111"><input id="ContentPlaceHolder1_chkboxCandidateList_0" type="checkbox" name="ctl00$ContentPlaceHolder1$chkboxCandidateList$0" checked="checked" value="486"><label for="ContentPlaceHolder1_chkboxCandidateList_0">Kratika Shukla</label></span>

そのため、[送信] ボタンをクリックすると、メールとモバイルの値が取得されません

chkboxCandidateList.Items[i].Attributes["Email"] -- getting null

この記事を確認しましたが、回答に満足できませんでした

4

2 に答える 2

0

ボタンをクリックしてこれを試してください

protected void btnSubmit_Click(object sender, EventArgs e)
{
 List<string> values=new List<string>();
foreach (ListItem item in chkboxCandidateList.Items)
if (item.Selected)
  values.Add(item.Text); // retrieve values here 

}

これはあなたのために働くかもしれません

于 2013-03-30T06:54:23.640 に答える
0

ここで解決策を得ました

クラスを作るだけ

namespace customControl
{
    public class ClsCheckBoxList : CheckBoxList
    {
        protected override object SaveViewState()
        {
            // create object array for Item count + 1
            object[] allStates = new object[this.Items.Count + 1];

            // the +1 is to hold the base info
            object baseState = base.SaveViewState();
            allStates[0] = baseState;

            Int32 i = 1;
            // now loop through and save each Style attribute for the List
            foreach (ListItem li in this.Items)
            {
                Int32 j = 0;
                string[][] attributes = new string[li.Attributes.Count][];
                foreach (string attribute in li.Attributes.Keys)
                {
                    attributes[j++] = new string[] { attribute, li.Attributes[attribute] };
                }
                allStates[i++] = attributes;
            }
            return allStates;
        }

        protected override void LoadViewState(object savedState)
        {
            if (savedState != null)
            {
                object[] myState = (object[])savedState;

                // restore base first
                if (myState[0] != null)
                    base.LoadViewState(myState[0]);

                Int32 i = 1;
                foreach (ListItem li in this.Items)
                {
                    // loop through and restore each style attribute
                    foreach (string[] attribute in (string[][])myState[i++])
                    {
                        li.Attributes[attribute[0]] = attribute[1];
                    }
                }
            }
        }
    }
}

そしてASP.NETでそのための参照を追加します

<%@ Register TagPrefix="TRControls" Namespace="customControl" %>

 <TRControls:ClsCheckBoxList ID="chkBox" runat="server">
    </TRControls:ClsCheckBoxList>

コードビハインドでのバインド用

if (!IsPostBack)
        {
            ListItem lstItem = new ListItem("vikas", "0", true);
            lstItem.Attributes.Add("love", "sure");
            chklstbox.Items.Add(lstItem);
            chkBox.Items.Add(lstItem);
            lstItem = new ListItem("kratika", "1", true);
            lstItem.Attributes.Add("love", "not sure");
            chklstbox.Items.Add(lstItem);
            chkBox.Items.Add(lstItem);
        }

以上で、属性の値を取得できるようになりました

于 2013-03-30T07:39:02.817 に答える