<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: GUI Combo Box based on Two Related Columns in Discussions</title>
    <link>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/632658#M83102</link>
    <description>&lt;P&gt;Hello Jarmo,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I try to apply the solution to three columns, it works. However, I am not able to create a unique selection based on the first AND second columns.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

v1 = "";
v2 = "";
v3 = "";

dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);

Summarize(dt, uniqvals_1 = by(:Column 1));
Summarize(dt, uniqvals_2 = by(:Column 2));
Summarize(dt, uniqvals_3 = by(:Column 2,:Column 3));



aa_options = Associative Array();
For(i = 1, i &amp;lt;= N Items(uniqvals_1), i++,
	col1_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 1 == uniqvals_1[i]);
	col2_vals = dt[col1_idx, "Column 2"];
	aa_options[uniqvals_1[i]] = col2_vals;
);

ab_options = Associative Array();
For(i = 1, i &amp;lt;= N Items(uniqvals_2), i++,
	col2_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 2 == uniqvals_2[i]);
	col3_vals = dt[col2_idx, "Column 3"];
	ab_options[uniqvals_2[i]] = col3_vals;
);

/*
ac_options = Associative Array();
For(i = 1, i &amp;lt;= N Items(uniqvals_1), i++,
	col1_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 1 == uniqvals_1[i]);
	col2_vals = dt[col1_idx, "Column 2"];
	
	For(j=1, j&amp;lt;=N Items(uniqvals_2),j++
	
		col2_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 2 == uniqvals_2[j]);
		col3_vals = dt[col2_idx, "Column 3"];
		ac_options[uniqvals_2[j]] = col3_vals;
		
	);
	
);
*/

print(ac_options);


nw = New Window("Set the Value",
	Lineup Box(N Col(2),
		Text Box("Col1"), 
		cb1 = Combo Box(uniqvals_1, &amp;lt;&amp;lt; set function(function({this},
			
			cb2_vals = aa_options[(this &amp;lt;&amp;lt; get selected)];
			cb2 &amp;lt;&amp;lt; Set Items(cb2_vals);

		)), &amp;lt;&amp;lt; Set(1)
		),
		
		Text Box("Col2"), 
		cb2 = Combo Box(uniqvals_2, &amp;lt;&amp;lt; set function(function({this},
		
			cb3_vals = ab_options[(this &amp;lt;&amp;lt; get selected)];
			cb3 &amp;lt;&amp;lt; Set Items(cb3_vals);
			
		)), &amp;lt;&amp;lt; Set(1)
		),
		
		Text Box("Col3"), 
		cb3 = Combo Box(ab_options[uniqvals_2[1]])
	),
	H List Box(
		Button Box("OK", 
			v1 = cb1 &amp;lt;&amp;lt; get selected;
			v2 = cb2 &amp;lt;&amp;lt; get selected;
			v3 = cb3 &amp;lt;&amp;lt; get selected;
			nw &amp;lt;&amp;lt; close window;
			show(v1, v2, v3);
		),
		Button Box("Cancel", nw &amp;lt;&amp;lt; close window)
	)
);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;The above code works. However, if you look at the attached images, I am not able to create unique lists for Col2 and Col3.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There is probably a straightforward solution that I am missing.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
    <pubDate>Wed, 17 May 2023 17:05:02 GMT</pubDate>
    <dc:creator>CircularPuppy35</dc:creator>
    <dc:date>2023-05-17T17:05:02Z</dc:date>
    <item>
      <title>GUI Combo Box based on Two Related Columns</title>
      <link>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/629144#M82733</link>
      <description>&lt;P&gt;Hello,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If I have two columns in a file, I can create a combo box using the two columns separately (see JSL file attached). However, what I really want is that once I select the first option (say "a"), it should restrict my second box options to "a1", "a2" and "a3" only. See the Excel file attached.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Any help would be appreciated.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;v1 = "m";
v2 = "n";

dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);

subDt1 = dt &amp;lt;&amp;lt; Subset(Columns(:Column 1), invisible);
Summarize(col1_unique_vals = by(Column 1));
subDt2 = dt &amp;lt;&amp;lt; Subset(Columns(:Column 2), invisible);
Summarize(col2_unique_vals = by(Column 2));


win = New Window("Set the Value",
	H List Box(Text Box("Col1"), combo_box1 = Combo Box(col1_unique_vals)),
	H List Box(Text Box("Col2"), combo_box2 = Combo Box(col2_unique_vals)), 

	H List Box(
		Button Box("OK", 

			v1 = combo_box1 &amp;lt;&amp;lt; get selected;
			v2 = combo_box2 &amp;lt;&amp;lt; get selected;

			win &amp;lt;&amp;lt; close window;

		), 

//a cancel button that closes the window and doesn't store store the results
		Button Box("Cancel", win &amp;lt;&amp;lt; close window)
	)
);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;JMP Version - JMP Pro 14&lt;/P&gt;</description>
      <pubDate>Fri, 09 Jun 2023 16:09:26 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/629144#M82733</guid>
      <dc:creator>CircularPuppy35</dc:creator>
      <dc:date>2023-06-09T16:09:26Z</dc:date>
    </item>
    <item>
      <title>Re: GUI Combo Box based on Two Related Columns</title>
      <link>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/629164#M82735</link>
      <description>&lt;P&gt;You need to add function (or script) to limit the options in second combo box. One option below (I think it should work with JMP14)&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

v1 = "";
v2 = "";

dt = Open("$DOWNLOADS/JMP_Question.xlsx", Worksheets("Sheet1"), invisible);

Summarize(dt, uniqvals = by(:Column 1));

aa_options = Associative Array();
For(i = 1, i &amp;lt;= N Items(uniqvals), i++,
	col1_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 1 == uniqvals[i]);
	col2_vals = dt[col1_idx, "Column 2"];
	aa_options[uniqvals[i]] = col2_vals;
);



nw = New Window("Set the Value",
	Lineup Box(N Col(2),
		Text Box("Col1"), 
		cb1 = Combo Box(uniqvals, &amp;lt;&amp;lt; set function(function({this},
			cb2_vals = aa_options[(this &amp;lt;&amp;lt; get selected)];
			cb2 &amp;lt;&amp;lt; Set Items(cb2_vals);
		)), &amp;lt;&amp;lt; Set(1)
		),
		Text Box("Col2"), 
		cb2 = Combo Box(aa_options[uniqvals[1]])
	),
	H List Box(
		Button Box("OK", 
			v1 = cb1 &amp;lt;&amp;lt; get selected;
			v2 = cb2 &amp;lt;&amp;lt; get selected;
			nw &amp;lt;&amp;lt; close window;
			show(v1, v2);
		),
		Button Box("Cancel", nw &amp;lt;&amp;lt; close window)
	)
);
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 05 May 2023 16:46:39 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/629164#M82735</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2023-05-05T16:46:39Z</dc:date>
    </item>
    <item>
      <title>Re: GUI Combo Box based on Two Related Columns</title>
      <link>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/629173#M82738</link>
      <description>&lt;P&gt;Thanks Jarmo! You made it look easy. :)&lt;/img&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It worked.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 05 May 2023 17:30:16 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/629173#M82738</guid>
      <dc:creator>CircularPuppy35</dc:creator>
      <dc:date>2023-05-05T17:30:16Z</dc:date>
    </item>
    <item>
      <title>Re: GUI Combo Box based on Two Related Columns</title>
      <link>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/629951#M82810</link>
      <description>&lt;P&gt;Hello Jarmo,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Another trouble I have been having with the dialog box is taking a list as an input.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If I use the following code.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;
Names Default To Here(1);

v1 = "";
v2 = "";

dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);

Summarize(dt, uniqvals = by(:Column 1));

aa_options = Associative Array();
For(i = 1, i &amp;lt;= N Items(uniqvals), i++,
	col1_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 1 == uniqvals[i]);
	col2_vals = dt[col1_idx, "Column 2"];
	aa_options[uniqvals[i]] = col2_vals;
);



nw = New Window("Set the Value",
	Lineup Box(N Col(2),
		Text Box("Col1"),
		cb1 = Combo Box(
			uniqvals,
			&amp;lt;&amp;lt;set function(
				Function({this},
					cb2_vals = aa_options[(this &amp;lt;&amp;lt; get selected)];
					cb2 &amp;lt;&amp;lt; Set Items(cb2_vals);
				)
			),
			&amp;lt;&amp;lt;Set(1)
		),
		Text Box("Col2"),
		cb2 = Combo Box(aa_options[uniqvals[1]])
	), 

	Text Box("List select"),
	text_box = Text Edit Box({"list1", "list2", "list3"}), 

	box 1 = 

	H List Box(
		Button Box("OK",
			v1 = cb1 &amp;lt;&amp;lt; get selected;
			v2 = cb2 &amp;lt;&amp;lt; get selected;
			v3 = text_box &amp;lt;&amp;lt; get text;
			nw &amp;lt;&amp;lt; close window;
			Show(v1, v2, v3);

			New Window("Hello", String Col Box(v3[1]));


		),
		Button Box("Cancel", nw &amp;lt;&amp;lt; close window)
	)
);

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It is not taking the list as an input. Am I doing something wrong?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 09 May 2023 03:55:41 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/629951#M82810</guid>
      <dc:creator>CircularPuppy35</dc:creator>
      <dc:date>2023-05-09T03:55:41Z</dc:date>
    </item>
    <item>
      <title>Re: GUI Combo Box based on Two Related Columns</title>
      <link>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/630021#M82818</link>
      <description>&lt;P&gt;Even if JMP lets you put the list into Text Box (not sure why, I think it should throw an error), it is still a string (JMP most likely performs conversion on it), so you cannot reference it with index directly.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can either split it into list using Words (and maybe Substitute to remove extra characters such as brackets) or Parse() it into a list&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

nw = new window("",
	tb = Text Edit Box({"list1", "list2", "list3"}), 
);

tb_txt = tb &amp;lt;&amp;lt; get text;

show(tb_txt);
show(type(tb_txt));

show(Parse(tb &amp;lt;&amp;lt; get text));
show(type(Parse(tb &amp;lt;&amp;lt; get text)));&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 09 May 2023 05:12:36 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/630021#M82818</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2023-05-09T05:12:36Z</dc:date>
    </item>
    <item>
      <title>Re: GUI Combo Box based on Two Related Columns</title>
      <link>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/632658#M83102</link>
      <description>&lt;P&gt;Hello Jarmo,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I try to apply the solution to three columns, it works. However, I am not able to create a unique selection based on the first AND second columns.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-jsl"&gt;Names Default To Here(1);

v1 = "";
v2 = "";
v3 = "";

dt = Open("JMP_Question.xlsx", Worksheets("Sheet1"), invisible);

Summarize(dt, uniqvals_1 = by(:Column 1));
Summarize(dt, uniqvals_2 = by(:Column 2));
Summarize(dt, uniqvals_3 = by(:Column 2,:Column 3));



aa_options = Associative Array();
For(i = 1, i &amp;lt;= N Items(uniqvals_1), i++,
	col1_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 1 == uniqvals_1[i]);
	col2_vals = dt[col1_idx, "Column 2"];
	aa_options[uniqvals_1[i]] = col2_vals;
);

ab_options = Associative Array();
For(i = 1, i &amp;lt;= N Items(uniqvals_2), i++,
	col2_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 2 == uniqvals_2[i]);
	col3_vals = dt[col2_idx, "Column 3"];
	ab_options[uniqvals_2[i]] = col3_vals;
);

/*
ac_options = Associative Array();
For(i = 1, i &amp;lt;= N Items(uniqvals_1), i++,
	col1_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 1 == uniqvals_1[i]);
	col2_vals = dt[col1_idx, "Column 2"];
	
	For(j=1, j&amp;lt;=N Items(uniqvals_2),j++
	
		col2_idx = dt &amp;lt;&amp;lt; Get Rows Where(:Column 2 == uniqvals_2[j]);
		col3_vals = dt[col2_idx, "Column 3"];
		ac_options[uniqvals_2[j]] = col3_vals;
		
	);
	
);
*/

print(ac_options);


nw = New Window("Set the Value",
	Lineup Box(N Col(2),
		Text Box("Col1"), 
		cb1 = Combo Box(uniqvals_1, &amp;lt;&amp;lt; set function(function({this},
			
			cb2_vals = aa_options[(this &amp;lt;&amp;lt; get selected)];
			cb2 &amp;lt;&amp;lt; Set Items(cb2_vals);

		)), &amp;lt;&amp;lt; Set(1)
		),
		
		Text Box("Col2"), 
		cb2 = Combo Box(uniqvals_2, &amp;lt;&amp;lt; set function(function({this},
		
			cb3_vals = ab_options[(this &amp;lt;&amp;lt; get selected)];
			cb3 &amp;lt;&amp;lt; Set Items(cb3_vals);
			
		)), &amp;lt;&amp;lt; Set(1)
		),
		
		Text Box("Col3"), 
		cb3 = Combo Box(ab_options[uniqvals_2[1]])
	),
	H List Box(
		Button Box("OK", 
			v1 = cb1 &amp;lt;&amp;lt; get selected;
			v2 = cb2 &amp;lt;&amp;lt; get selected;
			v3 = cb3 &amp;lt;&amp;lt; get selected;
			nw &amp;lt;&amp;lt; close window;
			show(v1, v2, v3);
		),
		Button Box("Cancel", nw &amp;lt;&amp;lt; close window)
	)
);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;The above code works. However, if you look at the attached images, I am not able to create unique lists for Col2 and Col3.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;There is probably a straightforward solution that I am missing.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Wed, 17 May 2023 17:05:02 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/632658#M83102</guid>
      <dc:creator>CircularPuppy35</dc:creator>
      <dc:date>2023-05-17T17:05:02Z</dc:date>
    </item>
    <item>
      <title>Re: GUI Combo Box based on Two Related Columns</title>
      <link>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/632675#M83107</link>
      <description>&lt;P&gt;You could create new column which is combination of :Column 1 and :Column 2 and use that for the keys&lt;/P&gt;</description>
      <pubDate>Wed, 17 May 2023 19:25:19 GMT</pubDate>
      <guid>https://community.jmp.com/t5/Discussions/GUI-Combo-Box-based-on-Two-Related-Columns/m-p/632675#M83107</guid>
      <dc:creator>jthi</dc:creator>
      <dc:date>2023-05-17T19:25:19Z</dc:date>
    </item>
  </channel>
</rss>

