2013-04-25 4 views
3

У меня есть выпадающий список, который привязываться к DataTable следующим образом:Переплет 3 значения в раскрывающемся списке

MatID MatName MatGroupID 
1  Mat1  11 
2  Mat2  22 
3  Mat3  33 
<asp:DropDownList ID="DropDownList_MAT" runat="server" AutoPostBack="true" OnSelectedIndexChanged="UpdateDetails" DataTextField="MatGroupID" DataValueField="Matname" /> 
<asp:Label ID="Label_StaticMatName" runat="server" /> 

код:

protected void UpdateDetails(object sender, EventArgs e) 
{ 
Label_StaticLockGroupName.Text = DropDownList_MAT.SelectedItem.Value; 
} 

MatGroupID я назначен DataTextField и DataValueField является MatName. Когда я выбираю значение в раскрывающемся списке, я хочу, чтобы текстовое поле было поле значения, а также MatID. Как я могу поддерживать MatID, когда пользователь каждый раз выбирает значение выпадающего списка

ответ

1

Создает класс для Mat (который также включает MatGroupId и MatId), поэтому вы можете просто сохранить уникальный идентификатор из класса DataValue, а позже вы будете получить класс из уникального идентификатора, а затем вы получите все свои сохраненные данные в своем классе, потому что вы не можете хранить кратные DataValueFields.

Другим вариантом было бы построить строку, что-то вроде:

string value = "1" + "#" + "Mat1" + "#" + "11"; 

так позже вы можете разделить его с помощью:

string MatId = value.Split('#')[0]; 
string MatName = value.Split('#')[1]; 
string MatGroupId = value.Split('#')[2]; 
+0

Так я должен использовать DataValueField как новый столбец, который представляет собой комбинацию имени # GroupID. Но что, если имя содержит хэш-тег? – Eve

+0

вы можете использовать любой другой символ, который может быть сохранен в строке. вы также можете использовать несколько символов типа «## %% &&», я не думаю, что ваше имя будет содержать такую ​​строку. иначе я бы предложил создать класс, тогда у вас не будет этой проблемы. – Postback

1

Самое простое решение:

Заполнение несколько столбцов в атрибуте Value Разделяется | (Труба)

string SQL="SELECT ID +' | '+ Field3 as ValField, Field2 as DispField FROM Table1"; 

ddl.DataSource = GetDataTable(SQL); 
ddl.DataTextField = "DispField"; 
ddl.DataValueField = "ValueField"; 
ddl.DataBind(); 

Теперь Обработка значение в постбэка

string[] values = ddl.SelectedValue.Split('|'); 
Response.Write (values[0]); 
Response.Write (values[1]); 
Смежные вопросы